java - GUI 简单对齐的快速建议?

标签 java user-interface graphic

我是 Java 新手,我们有一项任务。我必须创建一个数学框架来执行某些操作并以某种方式格式化 GUI。除了将三个文本字段堆叠在顶部之外,我可以做所有事情。像这样:

t1
t2
t3 

这三个盒子在左侧垂直向下,而其他 4 个盒子则在底部。

其中t1、t2和t3是文本字段,1、2、3和4是操作函数。

我无法让 x、y 和 z 位于左侧。这是我的代码,如果可以的话请帮忙!

ConvertFrame.java:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class ConvertFrame extends JFrame {
    private final JLabel prompt; // label to prompt user to enter Fahrenheit
    private final JLabel display; // label to display temperature in Celsius
    private final JTextField temperatureF; // textfield to enter temperature
    private JButton b1;
    private JButton b2;
    private JButton b3;
    private JButton b4;
    private JTextField t1;
    private JTextField t2;
    private JTextField t3;

    private JLabel operation;
    private JLabel equL;

    // constructor sets up GUI
    public ConvertFrame() {
        super("Math Frame");

        prompt = new JLabel("Enter two numbers:");

        operation = new JLabel("        OPR ");
        equL = new JLabel(" = ");

        temperatureF = new JTextField(10); // textfield
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1, 3));

        JPanel panel2 = new JPanel();
        panel2.setLayout(new GridLayout(1, 5));

        b1 = new JButton("ADD");
        b2 = new JButton("SUB");
        b3 = new JButton("MUL");
        b4 = new JButton("CLEAR");

        t1 = new JTextField(7);
        t2 = new JTextField(7);
        t3 = new JTextField(7);

        panel2.add(t1);
        panel2.add(operation);
        panel2.add(t2);
        panel2.add(equL);
        panel2.add(t3);

        panel.add(b1);
        panel.add(b2);
        panel.add(b3);
        panel.add(b4);
        // register anonymous action listener

        Handler1 h1 = new Handler1();
        Handler2 h2 = new Handler2();
        Handler3 h3 = new Handler3();
        Handler4 h4 = new Handler4();

        b1.addActionListener(h1);
        b2.addActionListener(h2);
        b3.addActionListener(h3);
        b4.addActionListener(h4);

        display = new JLabel("");

        add(prompt, BorderLayout.NORTH); // north region
        add(panel2, BorderLayout.CENTER); // center region
        add(panel, BorderLayout.SOUTH); // south region
    } // end ConvertFrame constructor

    private class Handler1 implements ActionListener // anonymous inner class
    {
        public void actionPerformed(ActionEvent e) {
            String st1 = t1.getText();
            String st2 = t2.getText();
            int x = Integer.parseInt(st1);
            int y = Integer.parseInt(st2);
            int z = x + y;
            String st3 = "";
            st3 = st3 + z;
            t3.setText(st3);

        }
    } //

    private class Handler2 implements ActionListener // anonymous inner class
    {
        public void actionPerformed(ActionEvent e) {
            String st1 = t1.getText();
            String st2 = t2.getText();
            int x = Integer.parseInt(st1);
            int y = Integer.parseInt(st2);
            int z = x - y;
            String st3 = "";
            st3 = st3 + z;
            t3.setText(st3);

        }
    } // end anonymous inner class

    private class Handler3 implements ActionListener // anonymous inner class
    {
        public void actionPerformed(ActionEvent e) {
            String st1 = t1.getText();
            String st2 = t2.getText();
            int x = Integer.parseInt(st1);
            int y = Integer.parseInt(st2);
            int z = x * y;
            String st3 = "";
            st3 = Integer.toString(z);

            t3.setText(st3);
        }
    } // end anonymous inner class

    private class Handler4 implements ActionListener // anonymous inner class
    {
        public void actionPerformed(ActionEvent e) {
            t1.setText("");
            t2.setText("");
            t3.setText("");
        }
    } // end anonymous inner class

    // end call to addActionListener
} // end class ConvertFrame

Convert.java:

import javax.swing.JFrame;

public class Convert {
    public static void main(String[] args) {
        ConvertFrame convertFrame = new ConvertFrame();
        convertFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        convertFrame.setSize(500, 400); // set frame size
        convertFrame.setVisible(true); // display frame
    }
} // end class

最佳答案

如果你想将文本字段堆叠在顶部

你应该改变这个

panel2.setLayout(new GridLayout(1, 5));

到此

panel2.setLayout(new GridLayout(5, 1));

因为在 new GridLayout(row, column) 中,第一个参数是行数和下一个列数。当前您有 1 行和 5 列。因此文本字段定位为 coulmns 。如果您想要垂直放置则应使用 1 列和 5 行

关于java - GUI 简单对齐的快速建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397676/

相关文章:

手动Java GUI开发

javascript - 繁重的计算和数据显示而不阻塞UI

java - Netbeans 崩溃

c++ - 与 Direct3D SpriteBatch 混合

java - 在 JPanel 上绘图

java - JSoup CSS/DOM 问题

css - 更改默认颜色选择器框

java - 分布式系统,最好的框架?

java - 如何检索字符串中匹配模式的索引?

java - 什么是 J9VMInternals,它是如何工作的?