我试图垂直对齐JPanel。 setAlignmentY未按预期工作。 这是我到目前为止所做的。
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class ValignJPanel {
public static void main(String args[]) {
JFrame frame = new JFrame("Vertical Alignment");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel1 = wrapPanel(createPanel(), Component.TOP_ALIGNMENT);
JPanel panel2 = wrapPanel(createPanel(), Component.CENTER_ALIGNMENT);
JPanel panel3 = wrapPanel(createPanel(), Component.BOTTOM_ALIGNMENT);
frame.setLayout(new GridLayout(1, 3));
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
frame.setSize(400, 150);
frame.setVisible(true);
}
private static JPanel wrapPanel(JPanel oldPanel, float alignment) {
JPanel panel = new JPanel();
oldPanel.setAlignmentY(alignment);
panel.add(oldPanel);
return panel;
}
private static JPanel createPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("Hello world"));
panel.add(new JTextField(10));
panel.setBorder(new LineBorder(Color.red));
return panel;
}
}
我正在尝试创建一个包含JPanel&将它包装为给定的对齐方式。
编辑(来自评论,带图片)我想获得看起来像这样的输出,但是代替按钮,我想要JPanel
答案 0 :(得分:4)
您需要做的是在BoxLayout
方法中将new JPanel
的布局设置为wrapPanel
。
JPanel panel = new JPanel();
BoxLayout layout = new BoxLayout(panel, BoxLayout.LINE_AXIS);
panel.setLayout(layout);
错误:使用您当前的代码它似乎无法正常工作,因为它会拉伸文本字段。如果您使用JButton
代替JTextFeild
,您将看到效果。我还在试图找出文本字段为什么这样做。
更新与上述代码一起,解决文本字段扩展的问题,正如Camickr在this answer
中所回答的那样
BoxLayout
是少数几个遵循组件最小和最大大小的布局管理器之一。因此,如果您想阻止面板拉伸,可以使用:
panel.setMaximumSize( panel.getPreferredSize() );
上面的代码是您想要放在createPanel
方法中的代码。
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class ValignJPanel {
public static void main(String args[]) {
JFrame frame = new JFrame("Vertical Alignment");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel1 = wrapPanel(createPanel(), Component.TOP_ALIGNMENT);
JPanel panel2 = wrapPanel(createPanel(), Component.CENTER_ALIGNMENT);
JPanel panel3 = wrapPanel(createPanel(), Component.BOTTOM_ALIGNMENT);
frame.setLayout(new GridLayout(1, 3));
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
frame.setSize(400, 150);
frame.setVisible(true);
}
private static JPanel wrapPanel(JPanel oldPanel, float alignment) {
JPanel panel = new JPanel();
BoxLayout layout = new BoxLayout(panel, BoxLayout.LINE_AXIS);
panel.setLayout(layout);
oldPanel.setAlignmentY(alignment);
panel.add(oldPanel);
return panel;
}
private static JPanel createPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("Hello world"));
panel.add(new JTextField(10));
panel.setBorder(new LineBorder(Color.red));
panel.setMaximumSize( panel.getPreferredSize());
return panel;
}
}