如何在java中安排JFrame中的按钮?

时间:2014-04-22 18:04:00

标签: java swing netbeans jpanel

我只是编程的初学者。我想在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();
  }
}

我该怎么做才能正确安排?

2 个答案:

答案 0 :(得分:1)

我相信你要找的是gridbaglayout。它允许您基于网格放置元素(按钮,文本字段等)。这是它的文档:

http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

我还建议您查看其他一些布局管理器,因为那里有一些非常有趣和有用的布局管理器。有关GUI布局的一般介绍,请参阅此处的文档:

http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html

以上链接包含您开始使用所需的所有信息。

答案 1 :(得分:0)

为什么不使用eclipse窗口构建器或其他东西?您只需以图形方式调整按钮的大小即可。自己做所有摆动编程是浪费时间,使用gui构建gui编辑器并更专注于排序业务逻辑更好。如果你想做一个真正专注于挥杆的人,你可以花时间更彻底地研究它。

但是,如果您只想调整某些按钮的大小,可以使用setPreferredSize方法而不是setSize方法。