JButton文本不在图标中,setBounds不起作用

时间:2013-02-04 18:07:43

标签: java swing jpanel jbutton layout-manager

我有一个这样的小组:

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();
    }
}

按钮有2个问题:

  1. 我希望文字覆盖图像,是否可能(最好是在图像中间)?目前它出现在它的左侧。 (解决)

  2. 由于某些奇怪的原因setBounds无法正常工作,按钮始终显示在顶部中心(似乎只能在没有布局的情况下使用,任何替代方法都可以设置按钮的位置和大小但我喜欢?)

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:1)

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

panel.setLayout(null);

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