【问题标题】:Java putting data in border layoutJava将数据放入边框布局
【发布时间】:2012-02-10 17:24:07
【问题描述】:

如何像windows计算器一样在Java中实现如下输出,

例子,

First Row = Text Field
Second Row = 5 buttons
Third  Row = 5 Buttons

以及边框布局中心的剩余数据,

Border Layout North 的第一、二、三行如何拼合?这是我的代码,

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

    public class GridLayoutFrame extends JFrame 
    {

        private JButton[] buttons; // Array of Buttons 1 to 10
        private JButton[] topButton; // 10 buttons that has to be placed under Text field 5 button in each row
        private JPanel Bottom; // A panel to show everything under first three Row
        private JPanel Top; // Top Panel that contains Text Field and 2nd and third Row
        private JTextField Input = new JTextField();

        private static final String[] names = 
          {"7", "8", "9", "4", "5", "6","1","2","3"};

        private static final String[] topButtons = 
              {"MC","MR","MS","M+","M-","<-","CE","C","+-","Root"};

       // no-argument constructor
       public GridLayoutFrame()
       {
          super ("Calculator");
          Bottom = new JPanel();  
          Top = new JPanel();
          Top.setLayout(new GridLayout(3,1,5,5));   // Three Rows (first row must only show a text field
          Bottom.setLayout(new GridLayout(5,5,10,10));
          topButton = new JButton[topButtons.length];
          buttons = new JButton[ names.length ];


          Input.setSize(500,500);
          Input.setEditable(false);
          Input.setBackground(Color.WHITE);
          Input.setPreferredSize(new Dimension(300, 30));

          for ( int count = 0; count < topButtons.length; count++ ) 
          {
             topButton[ count ] = new JButton( topButtons[count]);
             Top.add( topButton[ count ] ); // add button to panel
          }


          for ( int count = 0; count < names.length; count++ )

          {
             buttons[ count ] = new JButton( names[count]);
             Bottom.add( buttons[ count ] ); // add button to panel
          }

         add(Top,BorderLayout.NORTH);
         //add(Bottom,BorderLayout.CENTER);

       }
    } // end class GridLayoutFrame

代码的问题是,文本字段出现在顶部按钮出现的同一行中。 请帮忙

【问题讨论】:

    标签: java swing layout jframe panel


    【解决方案1】:

    最好使用 gridbaglayout 来满足您的要求,因为它非常灵活。 你可以看看http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

    我已修改您的程序以使用 GridBagLayout 作为顶部面板。我认为它可以满足您对顶部面板的期望。

    public GridLayoutFrame() {
            super("Calculator");
            Bottom = new JPanel();
            Top = new JPanel();
            Top.setLayout(new GridBagLayout()); // Three Rows (first row must
                                                        // only show a text field
            GridBagConstraints c = new GridBagConstraints();
            c.fill = GridBagConstraints.HORIZONTAL;
            c.weightx = 1;
    
    
            topButton = new JButton[topButtons.length];
    
            Input.setSize(500, 500);
            Input.setEditable(false);
            Input.setBackground(Color.WHITE);
            Input.setPreferredSize(new Dimension(300, 30));
    
            c.gridwidth = 5;
            Top.add(Input, c);
            c.gridwidth = 1;
    
    
            for (int count = 0; count < topButtons.length; count++) {
                topButton[count] = new JButton(topButtons[count]);
                c.gridx = count % 5;
                Top.add(topButton[count], c ); // add button to panel
            }
    
            Bottom.setLayout(new GridLayout(5, 5, 10, 10));
            buttons = new JButton[names.length];
            for (int count = 0; count < names.length; count++)
    
            {
                buttons[count] = new JButton(names[count]);
                Bottom.add(buttons[count]); // add button to panel
            }
    
            add(Top, BorderLayout.NORTH);
            add(Bottom,BorderLayout.CENTER);
    

    【讨论】:

      【解决方案2】:

      编辑:不要介意我之前的JPanel 建议。应该这样做:

      add(InputPanel, BorderLayout.NORTH);
      add(Top,BorderLayout.CENTER);
      add(Bottom,BorderLayout.SOUTH);
      

      【讨论】:

      • 您也可以直接将文本字段添加到 BorderLayout.NORTH 而不是为其创建新的 JPanel。
      猜你喜欢
      • 2020-09-11
      • 2016-07-17
      • 2023-03-22
      • 1970-01-01
      • 2017-05-12
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多