Java 设置Swing的大小问题
我正在尝试使用Swing创建一个非常简单的GUI面板 这是我的密码:Java 设置Swing的大小问题,java,swing,Java,Swing,我正在尝试使用Swing创建一个非常简单的GUI面板 这是我的密码: JPanel bigBlindSelectionPanel = new JPanel(); bigBlindSelectionPanel.setLayout(new BorderLayout()); bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black)); JList bigBlindList
JPanel bigBlindSelectionPanel = new JPanel();
bigBlindSelectionPanel.setLayout(new BorderLayout());
bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black));
JList bigBlindList = new JList<String>(model);
// Code to fill the list
JLabel bigBlindAddLabel = new JLabel("Add big blind numbers to queries");
bigBlindAddLabel.setBorder(new EmptyBorder(20, 20, 20, 20));
JScrollPane bigBlindScrollPanel = new JScrollPane(bigBlindList);
//bigBlindScrollPanel.setSize(0, 80);
bigBlindScrollPanel.setBorder(new EmptyBorder(20, 20, 20, 20));
JButton bigBlindAddButton = new JButton("Add");
bigBlindAddButton.addActionListener(this);
//bigBlindAddButton.setSize(0, 20);
bigBlindAddButton.setBorder(new EmptyBorder(20, 20, 20, 20));
bigBlindSelectionPanel.add(bigBlindAddLabel, BorderLayout.NORTH);
bigBlindSelectionPanel.add(bigBlindScrollPanel, BorderLayout.CENTER);
bigBlindSelectionPanel.add(bigBlindAddButton, BorderLayout.SOUTH);
frame.pack();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(bigBlindSelectionPanel);
frame.setVisible(true);
JPanel bigbindselectionpanel=newjpanel();
bigBlindSelectionPanel.setLayout(新的BorderLayout());
bigBlindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.black));
JList bigBlindList=新JList(型号);
//代码来填充列表
JLabel bigbindaddlabel=新的JLabel(“向查询添加大盲数”);
setboorder(新的EmptyBorder(20,20,20,20));
JScrollPane bigBlindScrollPanel=新的JScrollPane(bigBlindList);
//bigBlindScrollPanel.setSize(0,80);
setboorder(新的EmptyBorder(20,20,20,20));
JButton bigBlindAddButton=新JButton(“添加”);
bigBlindAddButton.addActionListener(此);
//bigBlindAddButton.setSize(0,20);
setboorder(新的EmptyBorder(20,20,20,20));
bigBlindSelectionPanel.add(bigBlindAddLabel,BorderLayout.NORTH);
bigBlindSelectionPanel.add(bigBlindScrollPanel,BorderLayout.CENTER);
bigBlindSelectionPanel.add(bigBlindAddButton,BorderLayout.SOUTH);
frame.pack();
框架。设置尺寸(300300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(bigBlindSelectionPanel);
frame.setVisible(true);
这就是结果
我有以下问题:
提前感谢您的帮助 可以使用以下方法控制JList的大小:
list.setVisibleRowCount(...);
然后,滚动条将根据模型中的数据根据需要显示或消失
按钮填充框架的宽度,因为这是BorderLayout的规则。如果您不希望按钮填充宽度,那么可以将其包装在JPanel中。默认情况下,JPanel使用FlowLayout,该FlowLayout重复添加到它的任何组件的大小:
JPanel wrapper = new JPanel();
wrapper.add(button);
frame.add(wrapper, BorderLayout.PAGE_END);
如何在不指定尺寸的情况下显示框架
您不需要setSize()方法。pack()
方法将以首选尺寸显示组件
此外,不需要为所有组件指定边框。创建边界布局时,可以在构件之间创建间隙:
bigBlindSelectionPanel.setLayout(new BorderLayout(20, 20));
然后,您只需在面板的右/左边缘添加边框即可。可以使用以下方法控制JList的大小:
list.setVisibleRowCount(...);
然后,滚动条将根据模型中的数据根据需要显示或消失
按钮填充框架的宽度,因为这是BorderLayout的规则。如果您不希望按钮填充宽度,那么可以将其包装在JPanel中。默认情况下,JPanel使用FlowLayout,该FlowLayout重复添加到它的任何组件的大小:
JPanel wrapper = new JPanel();
wrapper.add(button);
frame.add(wrapper, BorderLayout.PAGE_END);
如何在不指定尺寸的情况下显示框架
您不需要setSize()方法。pack()
方法将以首选尺寸显示组件
此外,不需要为所有组件指定边框。创建边界布局时,可以在构件之间创建间隙:
bigBlindSelectionPanel.setLayout(new BorderLayout(20, 20));
然后,您可以在面板的右/左边缘添加边框。非常感谢您的详细回答!在列表的可见行中,用JPanel包装的按钮工作得非常好。但是,如果删除setSize()方法,框架将显示一个空面板(仅显示标题栏)。我做错什么了吗?@BenoitGoderre,在将组件添加到框架后,您需要执行
pack()
,否则pack()将在空框架上执行。因此,pack()应该在设置可见(true)
之前完成。非常感谢您的详细回答!在列表的可见行中,用JPanel包装的按钮工作得非常好。但是,如果删除setSize()方法,框架将显示一个空面板(仅显示标题栏)。我做错什么了吗?@BenoitGoderre,在将组件添加到框架后,您需要执行pack()
,否则pack()将在空框架上执行。因此,pack()应该在设置可见(true)
之前完成。