我是新来的,并且迈出了Java的第一步。
出于学习目的,我正在尝试使用包含编号按钮的网格创建一个简单的GUI。 问题是,按钮的文本不会自动调整为按钮的大小。
让我先向您展示代码,以便您明白我的意思:
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleGUI implements ActionListener {
private JFrame frame;
private JPanel grid;
private JButton[] buttons;
public SimpleGUI() {
frame=new JFrame("Buttons grid");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
grid=new JPanel();
buttons=new JButton[100];
for (int i=0; i<buttons.length; i++) {
buttons[i]=new JButton(Integer.toString(i+1));
buttons[i].setActionCommand(Integer.toString(i+1));
grid.add(buttons[i]);
buttons[i].addActionListener(this);
}
frame.getContentPane().add(grid);
}
public static void main(String[] args) {
SimpleGUI gui=new SimpleGUI();
gui.go();
}
public void go() {
grid.setLayout(new GridLayout(10,10));
frame.setSize(500,500);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String buttonNum=e.getActionCommand();
System.out.println("You've pressed "+buttonNum);
}
}
我无法上传图片,因此您必须运行此代码才能查看结果。 问题是,按钮太小而文字无法容纳,因此不是数字,而是会出现三个点。 (的 ... ) 只有当我展开窗口(从而相应地扩展按钮的尺寸)时,数字才会正确显示在按钮上。 有没有办法让文本自己调整到按钮的尺寸,以便它始终可见?
感谢先进,并原谅我糟糕的语言(英语是我的第二语言)。
答案 0 :(得分:4)
确实 可以为按钮内的文本提供更多空间。文本周围的额外空白区域由边距控制,可以更改:
button.setMargin(new Insets(0, 0, 0, 0));
如果您想在默认情况下将按钮设置为方形,则可以覆盖其首选大小:
buttons[i] = new JButton(Integer.toString(i + 1)) {
@Override
public Dimension getPreferredSize() {
Dimension naturalSize = super.getPreferredSize();
int sideLength = Math.max(naturalSize.width, naturalSize.height);
return new Dimension(sideLength, sideLength);
}
};
然后在使用pack()
(根据Andrew Thompson的回答你应该使用的{{1}}时,初始布局将是正方形。
修改:更改了首选尺寸,以考虑按钮的正常首选尺寸。 (再次向A. Thompson致信)。
答案 1 :(得分:3)
进行如下所示的更改。
public void go() {
grid.setLayout(new GridLayout(10,10));
//frame.setSize(500,500);
frame.pack();
frame.setVisible(true);
}
这里的技巧是根本不更改按钮,而是让GUI调整到按钮的大小。这是通过调用pack()
来实现的。
使此窗口的大小适合其子组件的首选大小和布局。 ..