有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JButton文本不在图标中,setBounds不工作

我有一个类似这样的面板:

class A extends JPanel{
    private JButton button;

    A(int width, int height){
        setSize(width, height);
        button = new JButton("text");
        button.setIcon(IconLoadedHere);
        button.setBounds(50, 50, getWidth()/5, getHeight()/5);
        button.setBorder(BorderFactory.createEmptyBorder());
        add(button);
     }
}

JFrame是这样的:

public class window extends JFrame{
    private JPanel panel;

    public window(){
        panel = new JPanel();
         setTitle("test");
         setSize(1280, 720);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setVisible(true);
    }
    public void loadA(){
         remove(panel);
         panel = new A(getWidth(), getHeight());
             add(panel);
         validate();
    }
}

按钮有两个问题:

    我想把文字放在图像上,这是可能的吗?(最好在图像的中间)现在它出现在它的左边。(已解决)

  1. 出于某种奇怪的原因setBounds不起作用,按钮总是出现在顶部中间(似乎只有在没有布局的情况下才能使用,有没有其他方法可以将按钮的位置和大小设置为“但是我会优先选择?”)

还有一个问题: 如果我想调整窗口的大小,我该怎么做才能使按钮和文本相应地调整大小?(目前只找到了逐个更改的解决方案,还有其他方法吗?)


共 (2) 个答案

  1. # 1 楼答案

    setBounds()仅在使用绝对布局时有效,而JPanel默认使用FlowLayout。我认为这是一个错误

    panel.setLayout(null);
    

    但是,使用绝对布局时,还必须手动设置x/y/宽度/高度,因此通常最好使用布局

  2. # 2 楼答案

    要控制按钮中文本的显示方式,应使用:

    button.setHorizontalTextPosition(JButton.CENTER);
    button.setVerticalTextPosition(JButton.CENTER);
    

    这将把文本放在按钮的中心

    默认情况下,水平文本位置设置为拖尾,这就是为什么它被定位在图标的一侧

    对于问题的布局部分,您应该真正阅读relevant part of the official tutorial。TLDR:使用布局管理器,他们将为您调整大小和定位