在Java中将多组JLabel和JTextBox添加到同一行
我正在构建一个方程求解器,允许用户输入一个方程组,然后得到答案。因此,我需要构建一个GUI,允许用户输入方程组。我决定从头开始做这件事。我的代码是这样的:在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
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();
}
}