在Java中将多组JLabel和JTextBox添加到同一行

在Java中将多组JLabel和JTextBox添加到同一行,java,swing,user-interface,netbeans,Java,Swing,User Interface,Netbeans,我正在构建一个方程求解器,允许用户输入一个方程组,然后得到答案。因此,我需要构建一个GUI,允许用户输入方程组。我决定从头开始做这件事。我的代码是这样的: private JFrame frame; private JTextField[][] text; private JLabel label; private JLabel equalLabel; private JLabel plusLabel; private JTextField answerText; private void d

我正在构建一个方程求解器,允许用户输入一个方程组,然后得到答案。因此,我需要构建一个GUI,允许用户输入方程组。我决定从头开始做这件事。我的代码是这样的:

private JFrame frame;
private JTextField[][] text;
private JLabel label;
private JLabel equalLabel;
private JLabel plusLabel;
private JTextField answerText;

private void displayGetEquations(int total)
{
frame = new JFrame("Enter Equations");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    equalLabel = new JLabel();
    equalLabel.setText(" = ");
    plusLabel = new JLabel();
    plusLabel.setText(" + ");
    answerText = new JTextField();
    answerText.setColumns(2);
    frame.setLayout(new GridLayout(0,10));
    text = new JTextField[3][3];
    for(int i = 0 ; i < 3 ; i++)
    {
 panel = new JPanel();
            panel.setLayout(new FlowLayout());
        for(int j = 0 ; j < 3 ; j++)
        {
            text[i][j] = new JTextField();
            text[i][j].setColumns(2);
            label = new JLabel();
            Font font = label.getFont();
            Font boldFont = new Font(font.getFontName(), Font.BOLD, font.getSize());
            label.setFont(boldFont);
            label.setText("x");
            panel.add(text[i][j]);
            panel.add(label);
            panel.add(plusLabel);
        }
        panel.add(equalLabel);
        panel.add(answerText);
        frame.add(panel);
        frame.revalidate();          
        frame.repaint(); 

    }
    frame.pack();
    frame.setVisible(true);
}
私有JFrame;
私有JTextField[][]文本;
私人标签;
私人JLabel equalLabel;
私人JLabel plusLabel;
私人JTextField answerText;
私有void displayGetEquations(整数总计)
{
frame=新JFrame(“输入公式”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
equalLabel=新的JLabel();
equalLabel.setText(“=”);
plusLabel=新的JLabel();
plusLabel.setText(“+”);
answerText=新的JTextField();
answerText.setColumns(2);
frame.setLayout(新的GridLayout(0,10));
text=新的JTextField[3][3];
对于(int i=0;i<3;i++)
{
panel=新的JPanel();
panel.setLayout(新的FlowLayout());
对于(int j=0;j<3;j++)
{
text[i][j]=新的JTextField();
文本[i][j]。设置列(2);
label=新的JLabel();
Font=label.getFont();
Font boldFont=新字体(Font.getFontName(),Font.BOLD,Font.getSize());
label.setFont(粗体字体);
label.setText(“x”);
增补(案文[i][j]);
面板。添加(标签);
面板。添加(plusLabel);
}
面板。添加(equalLabel);
面板。添加(应答文本);
框架。添加(面板);
frame.revalidate();
frame.repaint();
}
frame.pack();
frame.setVisible(true);
}
这是我运行上述代码时得到的结果:

但是我没有得到期望的输出,我希望是这样的:

这是通过NetBeans的拖放功能实现的,我做错了什么?我想要的可能吗? 任何帮助都将不胜感激。 谢谢


(这是通过NetBeans拖放功能实现的)

请考虑一下这里的理论。大图视图:您有一个带面板的框架,对吗?为什么没有一个有3个面板的框架?框架布局将是垂直堆叠窗格,每个面板将是带有4个文本字段的水平布局。您可能需要考虑使用JavaFX,您可以在这里做一些类似的事情:


然后在1个垂直布局中包含3个水平布局

您的代码有点混乱,这里发布的不是一个,因为它缺少
main
方法和导入以及变量
面板
,并且它给我的输出与您发布的不同:

从您的示例输出图像中,我提出了两种方法,一种使用多个
JPanel
并带有
FlowLayout
,另一种使用
BoxLayout
,另一种使用单个
JPanel
并带有
GridLayout
。另一种方法是使用
GridBagLayout

我使用了
x
y
z
变量名,因为我以为您在使用方程求解程序或类似的程序

以下是生成上述输出的代码:

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MultipleComponentsInRow {

    public static final int ROWS = 3;
    public static final int COLS = 4;

    private JFrame frame;
    private JPanel flowLayoutPanel;
    private JPanel gridLayoutPanel;

    private JTextField[][] flowFields;
    private JTextField[][] gridFields;

    private void createAndShowGui() {
        frame = new JFrame("Multiple Components In Row");

        flowFields = new JTextField[ROWS][COLS];
        gridFields = new JTextField[ROWS][COLS];

        flowLayoutPanel = new JPanel();
        flowLayoutPanel.setLayout(new BoxLayout(flowLayoutPanel, BoxLayout.PAGE_AXIS));

        gridLayoutPanel = new JPanel();
        gridLayoutPanel.setLayout(new GridLayout(ROWS, 7));

        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                flowFields[i][j] = new JTextField(2);
                gridFields[i][j] = new JTextField(2);
            }
        }

        //FlowLayout approach
        for (int i = 0; i < ROWS; i++) {
            JPanel pane = new JPanel();
            pane.setLayout(new FlowLayout());
            for (int j = 0; j < COLS; j++) {
                pane.add(flowFields[i][j]);
                switch (j) {
                    case 0:
                        pane.add(new JLabel(" x + "));
                        break;
                    case 1:
                        pane.add(new JLabel(" y + "));
                        break;
                    case 2:
                        pane.add(new JLabel(" z = "));
                        break;
                    default:
                        break;
                }
            }
            flowLayoutPanel.add(pane);
        }

        //GridLayout approach
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                gridLayoutPanel.add(gridFields[i][j]);
                switch (j) {
                    case 0:
                        gridLayoutPanel.add(new JLabel(" x + "));
                        break;
                    case 1:
                        gridLayoutPanel.add(new JLabel(" y + "));
                        break;
                    case 2:
                        gridLayoutPanel.add(new JLabel(" z = "));
                        break;
                    default:
                        break;
                }
            }
        }

        frame.setLayout(new GridLayout(1, 2, 5, 5));

        flowLayoutPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Flow Layout"));
        gridLayoutPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.RED), "Grid Layout"));

        frame.add(flowLayoutPanel);
        frame.add(gridLayoutPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MultipleComponentsInRow().createAndShowGui();
    }
}
导入java.awt.Color;
导入java.awt.FlowLayout;
导入java.awt.Font;
导入java.awt.GridLayout;
导入javax.swing.BorderFactory;
导入javax.swing.BoxLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
公共类多组件行{
公共静态最终整数行=3;
公共静态最终整数=4;
私有JFrame;
私人JPanel flowLayoutPanel;
私人JPanel gridLayoutPanel;
私有JTextField[][]流场;
私有JTextField[][]网格字段;
私有void createAndShowGui(){
框架=新的JFrame(“行中的多个组件”);
流场=新的JTextField[行][COLS];
gridFields=newjtextfield[ROWS][COLS];
flowLayoutPanel=新的JPanel();
flowLayoutPanel.setLayout(新的BoxLayout(flowLayoutPanel,BoxLayout.PAGE_轴));
gridLayoutPanel=newJPanel();
setLayout(新的GridLayout(第7行));
对于(int i=0;iimport java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MultipleComponentsInRow {

    public static final int ROWS = 3;
    public static final int COLS = 4;

    private JFrame frame;
    private JPanel flowLayoutPanel;
    private JPanel gridLayoutPanel;

    private JTextField[][] flowFields;
    private JTextField[][] gridFields;

    private void createAndShowGui() {
        frame = new JFrame("Multiple Components In Row");

        flowFields = new JTextField[ROWS][COLS];
        gridFields = new JTextField[ROWS][COLS];

        flowLayoutPanel = new JPanel();
        flowLayoutPanel.setLayout(new BoxLayout(flowLayoutPanel, BoxLayout.PAGE_AXIS));

        gridLayoutPanel = new JPanel();
        gridLayoutPanel.setLayout(new GridLayout(ROWS, 7));

        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                flowFields[i][j] = new JTextField(2);
                gridFields[i][j] = new JTextField(2);
            }
        }

        //FlowLayout approach
        for (int i = 0; i < ROWS; i++) {
            JPanel pane = new JPanel();
            pane.setLayout(new FlowLayout());
            for (int j = 0; j < COLS; j++) {
                pane.add(flowFields[i][j]);
                switch (j) {
                    case 0:
                        pane.add(new JLabel(" x + "));
                        break;
                    case 1:
                        pane.add(new JLabel(" y + "));
                        break;
                    case 2:
                        pane.add(new JLabel(" z = "));
                        break;
                    default:
                        break;
                }
            }
            flowLayoutPanel.add(pane);
        }

        //GridLayout approach
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                gridLayoutPanel.add(gridFields[i][j]);
                switch (j) {
                    case 0:
                        gridLayoutPanel.add(new JLabel(" x + "));
                        break;
                    case 1:
                        gridLayoutPanel.add(new JLabel(" y + "));
                        break;
                    case 2:
                        gridLayoutPanel.add(new JLabel(" z = "));
                        break;
                    default:
                        break;
                }
            }
        }

        frame.setLayout(new GridLayout(1, 2, 5, 5));

        flowLayoutPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), "Flow Layout"));
        gridLayoutPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.RED), "Grid Layout"));

        frame.add(flowLayoutPanel);
        frame.add(gridLayoutPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MultipleComponentsInRow().createAndShowGui();
    }
}