如何将JTextField与GridLayout的其余部分分开

时间:2017-11-22 19:32:45

标签: java swing awt grid-layout

我试图将计算器作为一个有趣的项目。但是当我试图让它看起来像一个......计算器时,它就像一个大网格,如下所示:

Calculator-Window

我试图跟随我在互联网上找到的任何东西,但那是一个很大的破产。

任何人都可以帮助我尝试将JTextField分开,以便它不会这样做,它可以在它自己的行中吗?

以下是代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame {
    public Main() {
        // Row = ->
        // Column = ^
        Container cp = getContentPane();
        cp.setLayout(new GridLayout(3, 0));

        JTextField txtCalc = new JTextField("0");
        txtCalc.setHorizontalAlignment(SwingConstants.RIGHT);
        JButton btn0 = new JButton("0");
        JButton btn1 = new JButton("1");
        JButton btn2 = new JButton("2");
        JButton btn3 = new JButton("3");
        JButton btn4 = new JButton("4");
        JButton btn5 = new JButton("5");
        JButton btn6 = new JButton("6");
        JButton btn7 = new JButton("7");
        JButton btn8 = new JButton("8");
        JButton btn9 = new JButton("9");
        JButton btn10 = new JButton("10");

        cp.add(txtCalc);
        cp.add(btn0);
        cp.add(btn1);
        cp.add(btn2);
        cp.add(btn3);
        cp.add(btn4);
        cp.add(btn5);
        cp.add(btn6);
        cp.add(btn7);
        cp.add(btn8);
        cp.add(btn9);
        cp.add(btn10);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Calculator");
        setSize(600, 600);
        setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(Main::new);
    }
}

编辑:

现在我有了答案!这是我的固定代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame {
    public Main() {
        Container cp = getContentPane();
        cp.setLayout(new GridLayout(3, 0));
        JPanel mainPanel = new JPanel(new BorderLayout());
        JPanel buttonPanel = new JPanel(new GridLayout(3, 0));
        setContentPane(border);

        JTextField txtCalc = new JTextField("0");
        txtCalc.setHorizontalAlignment(SwingConstants.RIGHT);
        txtCalc.setEditable(true);

        JButton btn1 = new JButton("1");
        JButton btn2 = new JButton("2");
        JButton btn3 = new JButton("3");
        JButton btn4 = new JButton("4");
        JButton btn5 = new JButton("5");
        JButton btn6 = new JButton("6");
        JButton btn7 = new JButton("7");
        JButton btn8 = new JButton("8");
        JButton btn9 = new JButton("9");
        JButton btn0 = new JButton("0");

        mainPanel.add(buttonPanel, BorderLayout.CENTER);
        mainPanel.add(txtCalc, BorderLayout.NORTH);

        buttonPanel.add(btn1);
        buttonPanel.add(btn2);
        buttonPanel.add(btn3);
        buttonPanel.add(btn4);
        buttonPanel.add(btn5);
        buttonPanel.add(btn6);
        buttonPanel.add(btn7);
        buttonPanel.add(btn8);
        buttonPanel.add(btn9);
        buttonPanel.add(btn0);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(Main::new);
    }
}

1 个答案:

答案 0 :(得分:2)

让主面板使用BorderLayout。将JTextField置于北方位置。将按钮放在使用GridLayout的面板中,然后将该面板添加到中心位置的主面板。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame {
public Main() {
    JPanel mainPanel = new JPanel(new BorderLayout());
    setContentPane(mainPanel);
    JTextField txtCalc = new JTextField("0");
    txtCalc.setHorizontalAlignment(SwingConstants.RIGHT);

    JPanel buttonPanel = new JPanel(new GridLayout(3, 0));

    JButton btn0 = new JButton("0");
    JButton btn1 = new JButton("1");
    JButton btn2 = new JButton("2");
    JButton btn3 = new JButton("3");
    JButton btn4 = new JButton("4");
    JButton btn5 = new JButton("5");
    JButton btn6 = new JButton("6");
    JButton btn7 = new JButton("7");
    JButton btn8 = new JButton("8");
    JButton btn9 = new JButton("9");

    buttonPanel.add(txtCalc);
    buttonPanel.add(btn0);
    buttonPanel.add(btn1);
    buttonPanel.add(btn2);
    buttonPanel.add(btn3);
    buttonPanel.add(btn4);
    buttonPanel.add(btn5);
    buttonPanel.add(btn6);
    buttonPanel.add(btn7);
    buttonPanel.add(btn8);
    buttonPanel.add(btn9);

    mainPanel.add(txtCalc, BorderLayout.NORTH);
    mainPanel.add(buttonPanel, BorderLayout.CENTER);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setTitle("Calculator");
    setSize(600, 600);
    setVisible(true);
}
public static void main(String[] args) {
    SwingUtilities.invokeLater(Main::new);
}
}