我有一个这样的小组:
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个问题:
我希望文字覆盖图像,是否可能(最好是在图像中间)?目前它出现在它的左侧。 (解决)
由于某些奇怪的原因setBounds
无法正常工作,按钮始终显示在顶部中心(似乎只能在没有布局的情况下使用,任何替代方法都可以设置按钮的位置和大小但我喜欢?)
还有一个问题: 如果我想调整窗口大小,我该怎么做才能使按钮和文本相应调整大小? (目前只找到了逐个更改它们的解决方案,还有其他办法吗?)
答案 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 /宽度/高度,因此通常最好使用布局。