Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何排列JavaGUI按钮?_Java_User Interface - Fatal编程技术网

如何排列JavaGUI按钮?

如何排列JavaGUI按钮?,java,user-interface,Java,User Interface,我需要安排我的按钮在一个特定的顺序,但无论我做什么修改,它只会改变按钮的大小,而不是位置。 抱歉,如果这是一个简单的问题,这是我的第一个Java类,我很难理解如何安排内容和事件处理 public class SwingCalculator extends JFrame { private JButton jbtReset; private JButton jbtAdd; private JButton jbtSubtract; private double TE

我需要安排我的按钮在一个特定的顺序,但无论我做什么修改,它只会改变按钮的大小,而不是位置。 抱歉,如果这是一个简单的问题,这是我的第一个Java类,我很难理解如何安排内容和事件处理

public class SwingCalculator extends JFrame {
    private JButton jbtReset;
    private JButton jbtAdd;
    private JButton jbtSubtract;

    private double TEMP;
    private double SolveTEMP;
    private JTextField jtfResult;

    Boolean addBool = false;
    Boolean subBool = false;

    String display = "";

    public SwingCalculator() 
    {
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(4, 3));
        p1.add(jbtReset = new JButton("Reset"));

        JPanel p2 = new JPanel();
        p2.setLayout(new FlowLayout());
        p2.add(jtfResult = new JTextField(10));
        jtfResult.setEditable(true);

        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(5, 1));
        p3.add(jbtAdd = new JButton("+"));
        p3.add(jbtSubtract = new JButton("-"));

        JPanel p = new JPanel();
        p.setLayout(new GridLayout());
        p.add(p2);
        p.add(p1);
        p.add(p3);

        add(p);

        jbtAdd.addActionListener(new ListenToAdd());
        jbtSubtract.addActionListener(new ListenToSubtract());
        jbtReset.addActionListener(new ListenToReset());
    } //JavaCaluclator()

    class ListenToReset implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            //display = jtfResult.getText();
            jtfResult.setText("");
            addBool = false;
            subBool = false;
            TEMP = 0;
            SolveTEMP = 0;
        }
    }

    class ListenToAdd implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            TEMP = Double.parseDouble(jtfResult.getText());
            jtfResult.setText("");
            addBool = true;
            SolveTEMP = SolveTEMP + TEMP;
            jtfResult.setText(  Double.toString(SolveTEMP));
            addBool = false;
            subBool = false;
        }
    }

    class ListenToSubtract implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            TEMP = Double.parseDouble(jtfResult.getText());
            jtfResult.setText("");
            subBool = true;
            SolveTEMP = SolveTEMP - TEMP;
            jtfResult.setText(  Double.toString(SolveTEMP));
            addBool = false;
            subBool = false;
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingCalculator calc = new SwingCalculator();
        calc.pack();
        calc.setLocationRelativeTo(null);
        calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        calc.setVisible(true);
    }

} //JavaCalculator
我的结果是:

预期结果:


您可以通过各种选项使用
GridBagLayout

例如:


您可以对各种选项使用
GridBagLayout

例如:


我已经在下面回答了:注意:如果您刚刚开始学习Java,我强烈建议您学习JavaFX而不是UI的Swing。十多年前,JavaFX取代了Swing。它更强大,更容易使用,而且更常用。虽然Swing还没有死,但除非你有学习它的特殊需要,我的意见是,你最好把时间花在学习当前的技术上。谢谢你的推荐。我之所以学习Swing,是因为这是我目前在大学的课程,但是,我将大胆地开始探索JavaFXgo,我已经回答了下面的问题:如果您刚刚开始学习Java,我强烈建议您学习JavaFX,而不是为您的UI学习Swing。十多年前,JavaFX取代了Swing。它更强大,更容易使用,而且更常用。虽然Swing还没有死,但除非你有学习它的特殊需要,我的意见是,你最好把时间花在学习当前的技术上。谢谢你的推荐。我正在学习Swing,因为这是我目前在大学的课程,但我将大胆地开始研究JavaFX
GridBagLayout grid = new GridBagLayout();  
GridBagConstraints gbc = new GridBagConstraints();  
setLayout(grid); 
//add TF
gbc.gridx=1;
gbc.gridy=0;
this.add(new JTextField(10),gbc);
gbc.gridx=0;
gbc.gridy=1;
this.add(new JButton("+"),gbc);
gbc.gridx=1;
this.add(new JButton("-"),gbc);
gbc.gridx=2;
this.add(new JButton("Reset"),gbc);

//also for another display (first TF will be on the same x as - Button) 
//(and maybe you want TF to cover the space for all 3 Button +,-,Reset)
//you could add 2 panels one over other (x=0 : y=0,y=1), place TF on P1 and all Buttons on P2