我正在为我正在开发的程序格式化GUI。我需要有四个按钮,上面有一个JList。我的JList一直出现在我的所有按钮之外而不是它们之上。有人能指出我正确的方向来解决我的问题吗?
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Test extends JPanel {
private static final long serialVersionUID = 1L;
private JList jlist;
public static void main(String[] args) {
JFrame boxOptions = new JFrame("Calculator");
boxOptions.setSize(0,0);
boxOptions.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
boxOptions.setResizable(false);
boxOptions.setLayout(new BorderLayout());
boxOptions.add(new Test(), BorderLayout.CENTER);
boxOptions.pack();
boxOptions.setLocationRelativeTo(null);
boxOptions.setVisible(true);
}
public Test(){
setLayout(new GridLayout(1, 4, 5, 5));
add(new JButton("add"));
add(new JButton("Check In"));
add(new JButton("Check Out"));
add(new JButton("Delete"));
String[] Titles = {"one", "two", "three"};
jlist = new JList(Titles);
jlist.setVisibleRowCount(3);
add(new JScrollPane(jlist), BorderLayout.NORTH);
}
}
答案 0 :(得分:2)
您将Test JPanel类的布局设置为GridLayout,然后尝试使用BorderLayout.NORTH说明符向其添加组件 - 这不是Kosher,因为该说明符仅适用于BorderLayout而且没有意义对于使用GridLayout的测试JPanel。
解决方案:嵌套JPanels。让外部JPanel使用BorderLayout,并使用BorderLayout.NORTH说明符将列表的JScrollPane添加到此外部JPanel,然后创建一个使用GridLayout的内部JPanel,它保存您的JButton并将其添加到主外部JPanel在BorderLayout.CENTER位置。
最重要的是:阅读你可以找到的here的Swing教程,特别是关于使用布局管理器的部分,因为没有必要猜测这些东西。
答案 1 :(得分:1)
首先,BorderLayout参数仅在布局为BorderLayout时使用。 您可以使用GridBagLayout。示例代码位于
之下 setLayout(new GridBagLayout());
add(new JButton("add"), new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
add(new JButton("Check In"), new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
add(new JButton("Check Out"), new GridBagConstraints(2, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
add(new JButton("Delete"), new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
String[] Titles = {"one", "two", "three"};
jlist = new JList(Titles);
jlist.setVisibleRowCount(3);
add(new JScrollPane(jlist), new GridBagConstraints(0, 0, 4, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
这是你期待的吗?