Java JList GUI格式化

时间:2014-04-24 02:15:47

标签: java swing jpanel jlist

我正在为我正在开发的程序格式化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);

    }

}

2 个答案:

答案 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));

这是你期待的吗?