我只是编程初学者。我想在 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

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


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!