java - JLabel 的新产品线?

标签 java swing jlabel flowlayout

我已经完成了我的作业,只是有一个小问题。 “标题”行与程序的其余部分显示在同一行中。它的外观如下:

enter image description here

我需要“整数计算”位于该行中,居中,以及其下的所有其他内容。对于理性的人来说也是如此。我知道这是因为 FlowLayout 的原因,但是有什么方法可以在此使用新行吗?我在某处读到可以使用 JTextArea,但我不知道如何实现它,特别是对于我当前拥有的所有文本字段。

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

import javax.swing.*;

public class HW3TabbedPane extends JFrame {
private JPanel intPanel = new JPanel();
private JPanel intPanel1 = new JPanel();
private JPanel intPanel2 = new JPanel();
private JPanel ratPanel = new JPanel();
private JPanel ratPanel1 = new JPanel();
private JPanel ratPanel2 = new JPanel();
private JTabbedPane tab = new JTabbedPane();
private FlowLayout flow = new FlowLayout();
private BorderLayout intBorder = new BorderLayout();
private BorderLayout ratBorder = new BorderLayout();
private JButton intAdd = new JButton("Add");
private JButton intSubstract = new JButton("Substract");
private JButton intMultiply = new JButton("Multiply");
private JButton intDivide = new JButton("Divide");
private JButton ratAdd = new JButton("Add");
private JButton ratSubstract = new JButton("Substract");
private JButton ratMultiply = new JButton("Multiply");
private JButton ratDivide = new JButton("Divide");
private JLabel intLabel = new JLabel("Integer Calculation");
private JLabel ratLabel = new JLabel ("Rational Calculation");
private JLabel n1IntLabel = new JLabel("Number 1");
private JLabel n2IntLabel = new JLabel("Number 2");
private JLabel n1RatLabel = new JLabel("Number 1");
private JLabel n2RatLabel = new JLabel("Number 2");
private JLabel intResultLabel = new JLabel("Result");
private JLabel ratResultLabel = new JLabel("Result");
private JTextField n1IntField = new JTextField();
private JTextField n2IntField = new JTextField();
private JTextField intResultField = new JTextField();
private JTextField n1RatField = new JTextField();
private JTextField n2RatField = new JTextField();
private JTextField ratResultField = new JTextField();
private Integer x;
private Integer y;
private Double w;
private Double z;

public HW3TabbedPane() {
    intPanel1.setLayout(flow);
    intPanel1.add(intLabel);
    intPanel1.add(n1IntLabel);
    intPanel1.add(n1IntField);
    intPanel1.add(n2IntLabel);
    intPanel1.add(n2IntField);
    intPanel1.add(intResultLabel);
    intPanel1.add(intResultField);
    intPanel2.add(intAdd);
    intPanel2.add(intSubstract);
    intPanel2.add(intMultiply);
    intPanel2.add(intDivide);
    ratPanel1.setLayout(flow);
    ratPanel1.add(ratLabel);
    ratPanel1.add(n1RatLabel);
    ratPanel1.add(n1RatField);
    ratPanel1.add(n2RatLabel);
    ratPanel1.add(n2RatField);
    ratPanel1.add(ratResultLabel);
    ratPanel1.add(ratResultField);
    ratPanel2.add(ratAdd);
    ratPanel2.add(ratSubstract);
    ratPanel2.add(ratMultiply);
    ratPanel2.add(ratDivide);
    n1IntField.setColumns(3);
    n2IntField.setColumns(3);
    intResultField.setColumns(4);
    intResultField.setEditable(false);
    n1RatField.setColumns(3);
    n2RatField.setColumns(3);
    ratResultField.setColumns(4);
    ratResultField.setEditable(false);

    intPanel.setLayout(intBorder);
    intPanel.add(intPanel1, BorderLayout.NORTH);
    intPanel.add(intPanel2, BorderLayout.SOUTH);
    ratPanel.setLayout(ratBorder);
    ratPanel.add(ratPanel1, BorderLayout.NORTH);
    ratPanel.add(ratPanel2, BorderLayout.SOUTH);

    JTabbedPane tab = new JTabbedPane();
    tab.addTab("Integer Operations", intPanel);
    tab.addTab("Rational Operations", ratPanel);

    add(tab);


     intAdd.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int res;
                x = Integer.parseInt(n1IntField.getText());
                y = Integer.parseInt(n2IntField.getText());
                res = x+y;
                intResultField.setText(""+res);
            }

            });

     intSubstract.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int res;
                x = Integer.parseInt(n1IntField.getText());
                y = Integer.parseInt(n2IntField.getText());
                res = x-y;
                intResultField.setText(""+res);
            }

            });

     intMultiply.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int res;
                x = Integer.parseInt(n1IntField.getText());
                y = Integer.parseInt(n2IntField.getText());
                res = x*y;
                intResultField.setText(""+res);
            }

            });
     intDivide.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int res;
                x = Integer.parseInt(n1IntField.getText());
                y = Integer.parseInt(n2IntField.getText());
                res = x/y;
                intResultField.setText(""+res);
            }

            });

     ratAdd.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                double res;
                w = Double.parseDouble(n1RatField.getText());
                z = Double.parseDouble(n2RatField.getText());
                res = w+z;
                ratResultField.setText(""+res);
            }

            });

     ratSubstract.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                double res;
                w = Double.parseDouble(n1RatField.getText());
                z = Double.parseDouble(n2RatField.getText());
                res = w-z;
                ratResultField.setText(""+res);
            }

            });

     ratMultiply.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                double res;
                w = Double.parseDouble(n1RatField.getText());
                z = Double.parseDouble(n2RatField.getText());
                res = w*z;
                ratResultField.setText(""+res);
            }

            });

     ratDivide.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                double res;
                w = Double.parseDouble(n1RatField.getText());
                z = Double.parseDouble(n2RatField.getText());
                res = w/z;
                ratResultField.setText(""+res);
            }

            });
     }



 public static void main(String[] args) {
        HW3TabbedPane frame = new HW3TabbedPane();
        frame.setTitle("Tabbed Pane");
        frame.setSize(400, 350);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

}

最佳答案

请注意,这与 JLabel 具有新行无关,而与巧妙使用布局管理器来放置组件有关。这里的秘诀是简单地使用更多的 JPanel,每个 JPanel 都有自己的布局,从而组合布局。例如,

// Center the text in the JLabel using SwingConstants
private JLabel intLabel = new JLabel("Integer Calculation", SwingConstants.CENTER); 

// ...


public HW3TabbedPane() {
    // GridLayout to hold JPanels in one column and in several rows
    intPanel1.setLayout(new GridLayout(0, 1));
    intPanel1.add(intLabel);  // add the title JLabel to the top

    // next row's JPanel
    JPanel nextJPanel = new JPanel(); // leave it FlowLayout
    nextJPanel.add(n1IntLabel);
    nextJPanel.add(n1IntField);
    nextJPanel.add(n2IntLabel);
    nextJPanel.add(n2IntField);
    nextJPanel.add(intResultLabel);
    nextJPanel.add(intResultField);

    // add to the intPanel1
    intPanel1.add(nextJPanel);

关于java - JLabel 的新产品线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769618/

相关文章:

java - 无法解析 java.io.EOFException?

java - 如何修复 HackerRank 中的 '<identifier> expected' 错误

java - 单击按钮时将 JLabel 转换为计时器

java - 在 JPanel 中显示多个 JTextField 和 JLabels 时遇到困难

java - 设置图标在 JLabel 上给出错误

java - 需要帮助编写文字游戏

java - 如何使用 .nextInt .hasNextInt 或 .hasNext 读取在单行中输入的整数而不会造成阻塞?

java - 一一按下按钮

java - 将 JScrollPane 添加到 JTextArea

按下按钮后,java不在jframe中显示jpanel