我试图让JPanel不高于它包含的单个JLabel中的文本。以下是一些简单的示例代码,仅限于基本问题:
import java.awt.*;
import javax.swing.*;
public class MinimumSpacing {
private static void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
JPanel pane0 = new JPanel(new GridLayout(0,1,0,0));
JPanel pane1 = new JPanel(new GridLayout(0,1,0,0));
JPanel pane2 = new JPanel(new GridLayout(0,1,0,0));
pane1.add(new JLabel("This is line #1.", JLabel.CENTER));
pane2.add(new JLabel("This is line #2.", JLabel.CENTER));
pane2.add(new JLabel("This is line #3.", JLabel.CENTER));
pane2.add(new JLabel("This is line #4.", JLabel.CENTER));
pane2.add(new JLabel("This is line #5.", JLabel.CENTER));
pane0.add(pane1);
pane0.add(pane2);
frame.add(pane0);
frame.setVisible(true);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (Exception exc) {
//
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
这是我得到的结果:
我想要的是“第1行”位于帧的顶部,其他4行紧随其下。缩小pane1的大小以实现这一目标的最佳方法是什么?
任何帮助都将不胜感激。
答案 0 :(得分:3)
不要使用GridLayout。 GridLayout将始终将每个组件的大小调整为相同的大小。
也许你应该使用垂直BoxLayout
。
阅读Layout Managers上Swing教程中的部分,了解更多信息和工作示例。
答案 1 :(得分:0)
如前所述,您应该考虑使用BoxLayout。以下是如何执行此操作:
private static void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
JPanel pane0 = new JPanel();
pane0.setLayout(new BoxLayout(pane0, BoxLayout.Y_AXIS));
pane0.add(new JLabel("This is line #1.", JLabel.CENTER));
pane0.add(new JLabel("This is line #2.", JLabel.CENTER));
pane0.add(new JLabel("This is line #3.", JLabel.CENTER));
pane0.add(new JLabel("This is line #4.", JLabel.CENTER));
pane0.add(new JLabel("This is line #5.", JLabel.CENTER));
frame.add(pane0);
frame.setVisible(true);
}