gpt4 book ai didi

java - 使用 BoxLayout 面板构建 Java GUI 时,如何将两个 swing 组件添加到同一行?

转载 作者:行者123 更新时间:2023-11-30 06:25:11 26 4
gpt4 key购买 nike

我需要能够将两个组件放在一行上,用其他几个标签和文本字段重复几次,但要让所有东西都整齐地堆叠在一起。我将在下面发布我的代码。

package madLibs;

import java.awt.BorderLayout;
import java.awt.Color;

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

public class MadLibsGUI {

public static void main(String[] args) {
MadLibsGUI main = new MadLibsGUI();
main.start();
}

public void start() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton madLibButton = new JButton("Lib it!");

JLabel title = new JLabel("Welcome to mad libs! \n Put in your words and press the 'Lib It' button to play!");
JLabel nameLabel = new JLabel("Name: ");
JLabel verbLabel1 = new JLabel("Verb: ");
JLabel adjLabel = new JLabel("Adjective: ");
JLabel verbLabel2 = new JLabel("Verb: ");
JLabel nounLabel = new JLabel("Noun: ");

JTextField nameTxt = new JTextField(20);
JTextField verbTxt1 = new JTextField(20);
JTextField adjTxt = new JTextField(20);
JTextField verbTxt2 = new JTextField(20);
JTextField nounTxt = new JTextField(20);

frame.getContentPane().add(BorderLayout.SOUTH, madLibButton);
frame.getContentPane().add(BorderLayout.NORTH, title);

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setBackground(Color.green);
frame.getContentPane().add(panel);

panel.add(nameLabel, nameTxt);
panel.add(verbLabel1);
panel.add(verbTxt1);
panel.add(adjLabel);
panel.add(adjTxt);
panel.add(verbLabel2);
panel.add(verbTxt2);
panel.add(nounLabel);
panel.add(nounTxt);

frame.setSize(500, 500);
frame.setVisible(true);
}
}

最佳答案

这是使用 GridBagLayout 的一种方法:

还有很多其他方法可以解决这个问题。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class MadLibsGUI {

public void start() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton madLibButton = new JButton("Lib it!");

JLabel title = new JLabel("Welcome to mad libs! \n Put in your words and press the 'Lib It' button to play!");
JLabel nameLabel = new JLabel("Name: ");
JLabel verbLabel1 = new JLabel("Verb: ");
JLabel adjLabel = new JLabel("Adjective: ");
JLabel verbLabel2 = new JLabel("Verb: ");
JLabel nounLabel = new JLabel("Noun: ");

JTextField nameTxt = new JTextField(20);
JTextField verbTxt1 = new JTextField(20);
JTextField adjTxt = new JTextField(20);
JTextField verbTxt2 = new JTextField(20);
JTextField nounTxt = new JTextField(20);

frame.getContentPane().add(BorderLayout.SOUTH, madLibButton);
frame.getContentPane().add(BorderLayout.NORTH, title);

panel.setLayout(new GridBagLayout());
panel.setBackground(Color.green);
frame.getContentPane().add(panel);
GridBagConstraints left = new GridBagConstraints();
left.anchor = GridBagConstraints.EAST;
GridBagConstraints right = new GridBagConstraints();
right.weightx = 2.0;
right.fill = GridBagConstraints.HORIZONTAL;
right.gridwidth = GridBagConstraints.REMAINDER;
panel.add(nameLabel, left);
panel.add(nameTxt, right);
panel.add(verbLabel1, left);
panel.add(verbTxt1, right);
panel.add(adjLabel, left);
panel.add(adjTxt, right);
panel.add(verbLabel2, left);
panel.add(verbTxt2, right);
panel.add(nounLabel, left);
panel.add(nounTxt, right);
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MadLibsGUI main = new MadLibsGUI();
main.start();
}
});
}

}

结果:

Result

关于java - 使用 BoxLayout 面板构建 Java GUI 时,如何将两个 swing 组件添加到同一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16013347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com