我只是编程的初学者。我想在NetBeans IDE中写一个计算器(只是它的图形)。但我在按我想要的方式按下按钮时遇到了一些问题。两个按钮具有不同的大小(0&=按钮)。但我不知道该怎么放!
这是我的代码:
public class Calculator extends JFrame implements ActionListener {
JPanel[] row = new JPanel[7];
JButton[] button = new JButton[28];
String[] buttonString = {"MC", "MR", "MS", "M+", "M-",
"CL", "CE", "C", "+/-", "√",
"7", "8", "9", "/", "%",
"4", "5", "6", "*", "1/x",
"1", "2", "3", "-",
".", "+", "0", "="};
Dimension displayDimension = new Dimension( 275, 60);
Dimension regularDimension = new Dimension( 55 , 40);
Dimension zeroButDimension = new Dimension( 110 , 40);
Dimension equalButDimension = new Dimension( 55 , 80);
JTextArea display = new JTextArea(1,20);
Font font = new Font("Times new Roman", Font.BOLD, 14);
Calculator() {
super("CALC");
setDesign();
setSize(300, 350);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(7,5);
setLayout(grid);
FlowLayout f1 = new FlowLayout(FlowLayout.CENTER);
FlowLayout f2 = new FlowLayout(FlowLayout.CENTER,1,1);
for(int i = 0; i < 7; i++)
row[i] = new JPanel();
row[0].setLayout(f1);
for(int i = 1; i < 7; i++)
row[i].setLayout(f2);
for(int i = 0; i < 28; i++) {
button[i] = new JButton();
button[i].setText(buttonString[i]);
button[i].setFont(font);
button[i].addActionListener(this);
}
display.setFont(font);
display.setEditable(false);
display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
display.setPreferredSize(displayDimension);
for(int i = 0; i < 24; i++)
button[i].setPreferredSize(regularDimension);
button[26].setPreferredSize(equalButDimension);
button[24].setPreferredSize(regularDimension);
button[25].setPreferredSize(regularDimension);
button[27].setPreferredSize(zeroButDimension);
row[0].add(display);
add(row[0]);
for(int i = 0; i < 5; i++)
row[1].add(button[i]);
add(row[1]);
for(int i = 5; i < 10; i++)
row[2].add(button[i]);
add(row[2]);
for(int i = 10; i < 15; i++)
row[3].add(button[i]);
add(row[3]);
for(int i = 15; i < 20; i++)
row[4].add(button[i]);
add(row[4]);
for(int i = 20; i < 24; i++)
row[5].add(button[i]);
row[5].add(button[26]);
add(row[5]);
row[6].add(button[27]);
row[6].add(button[24]);
row[6].add(button[25]);
add(row[6]);
setVisible(true);
}
public final void setDesign() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch(Exception e) {
}
}
public void actionPerformed(ActionEvent ae) {
}
public static void main(String[] arguments) {
Calculator c = new Calculator();
}
}
我应该怎么做才能正确安排它们?
我相信您正在寻找的是gridbaglayout。它允许您基于网格放置元素(按钮、文本字段等)。这是它的文档:
http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
我还建议看看其他一些布局管理器,因为有一些非常有趣和有用的布局管理器。有关GUI布局的一般介绍,请参阅此处的文档:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html
上面的链接提供了您入门所需的所有信息。
为什么不直接使用eclipse窗口生成器之类的东西?您可以简单地以图形方式调整按钮的大小。自己完成所有的swing编程都是浪费时间,最好使用gui来构建gui编辑器,并更多地关注业务逻辑的排序。如果你想做一个真正具体的挥杆动作,你可以花时间更彻底地研究它。
但如果你只是想调整某些按钮的大小,你可以使用按钮的setPreferredSize方法,而不是setSize方法。