![](/img/trans.png)
[英]How do I keep JTextFields in a Java Swing BoxLayout from expanding?
[英]How do I add put two swing components on the same line when constructing a Java GUI with BoxLayout panels?
我需要能夠將兩個組件放在一行上,並與其他幾個標簽和文本字段重復幾次,但要使所有內容堆疊得井井有條。 我將在下面發布我的代碼。
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();
}
});
}
}
結果:
另一個使用GridBagLayout的簡單示例。
要求是將兩個組件並排放置。 使用BorderLayout,每個組件在該組件中只能有一個區域,即NORTH,SOUTH,EAST或WEST等。
這是通過使用GridBagLayout修復的
JPanel panel1 = new JPanel(new GridBagLayout());
JPanel content1 = new JPanel(new GridLayout(0, 1));
Border border = BorderFactory.createTitledBorder("Workflow Files");
content1.setBorder(border);
ButtonGroup group = new ButtonGroup();
JRadioButton aRadioButton = new JRadioButton("4 slices");
content1.add(aRadioButton);
group.add(aRadioButton);
aRadioButton = new JRadioButton("8 slices", true);
content1.add(aRadioButton);
group.add(aRadioButton);
aRadioButton = new JRadioButton("12 slices");
content1.add(aRadioButton);
group.add(aRadioButton);
aRadioButton = new JRadioButton("16 slices");
content1.add(aRadioButton);
group.add(aRadioButton);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
panel1.add(content1, c);
JPanel content2 = new JPanel(new GridLayout(0,1));
border = BorderFactory.createTitledBorder("Topology Files");
content2.setBorder(border);
JCheckBox aCheckbox = new JCheckBox("Achivoes");
content2.add(aCheckbox);
aCheckbox = new JCheckBox("Grass");
content2.add(aCheckbox);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 1;
c.gridy = 0;
panel1.add(content2, c);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.