1

我有一个这样的面板:

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. 我想在图片上加上文字,这可能吗(最好在图片中间)?目前它出现在它的左侧。(解决了)

  2. 由于某些奇怪的原因setBounds无法正常工作,按钮总是出现在顶部中心(似乎只能在没有布局的情况下使用,是否可以将按钮的位置和大小设置为但我更喜欢?)

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

4

2 回答 2

3

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

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

这会将文本放在按钮的中心。

默认情况下,水平文本位置设置为 TRAILING,这就是它位于图标一侧的原因。

对于问题的布局部分,你真的应该阅读官方教程的相关部分。TLDR:使用布局管理器,他们会为您调整大小和定位。

于 2013-02-04T18:23:08.330 回答
1

setBounds() 仅在使用绝对布局时有效,而 JPanel 默认使用 FlowLayout。要禁用它,我认为它是

panel.setLayout(null);

但是,对于绝对布局,您还必须手动设置 x/y/width/height,因此通常最好使用布局。

于 2013-02-04T18:13:48.137 回答