Java在GUI上定位列表

时间:2010-05-03 17:16:26

标签: java user-interface swing jlist

我正在尝试将JList添加到GUI,但我想知道如何定位它?我希望它出现在TextArea的右侧,以便将数据发送到GUI进行选择。

有人可以建议怎么做吗?这是代码(注意:Java和GUI的新手)

protected static void createAndShowGUI() {
        GUI predict = new GUI();
        JFrame frame = new JFrame("Phone V1.0");

        frame.setContentPane(predict.createContentPane());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setMinimumSize(new Dimension(300, 400));
        frame.setVisible(true); // Otherwise invisible window
}

private JPanel createContentPane() {
    JPanel pane = new JPanel();

    TextArea = new JTextArea(5, 10);
    TextArea.setEditable(false);
    TextArea.setLineWrap(true);
    TextArea.setWrapStyleWord(true);
    TextArea.setWrapStyleWord(true);
    pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); 
    //Adds the buttons from Top     to Bottom

    String[] items = {"dsfsdfd"};
    list = new JList(items);
    JScrollPane scrollingList = new JScrollPane(list);
    int orient = list.getLayoutOrientation();

    JPanel window = new JPanel();
    pane.add(window);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(5, 3));

    JButton[] buttons = new JButton[] {
        new JButton("Yes"),
        new JButton(""),
        new JButton("Clr"),
        new JButton("1"),
        new JButton("2abc"),
        new JButton("3def"),
        new JButton("4ghi"),
        new JButton("5jkl"),
        new JButton("6mno"),
        new JButton("7pqrs"),
        new JButton("8tuv"),
        new JButton("9wxyz"),
        new JButton("*+"),
        new JButton("0_"),
        new JButton("^#")
    };  // Array Initialiser

    for (int i = 0; i < buttons.length; i++) {
        buttonPanel.add(buttons[i]);
        buttons[i].addActionListener(this);
    }
    pane.add(TextArea);
    pane.add(list);
    pane.add(buttonPanel);


    return pane;
}

5 个答案:

答案 0 :(得分:2)

阅读Using Layout Mananger上的Swing教程中的部分。无需仅使用单个布局管理器。您可以嵌套布局管理器以获得所需的效果。

答案 1 :(得分:1)

您可以使用 Mig Layout 等布局管理器进行此类定位。

alt text http://www.miglayout.com/images/Form.png

答案 2 :(得分:1)

TextArealistBorderLayout经理一起包含在新面板中。基本上BorderLayout管理器允许您使用北,南,东,西和中心坐标来排列组件。中心的组件占用所有可用空间,因为父容器有更多可用空间。

private JPanel createContentPane() {
    JPanel pane = new JPanel();  //this is your main panel
    JPanel textAreaPanel = new JPanel(new BorderLayout()); //the wrapper

    //Some more code...

    //Then at the end
    //Make your TextArea take the center
    textAreaPanel.add(TextArea, BorderLayout.CENTER);
    //And the list to the east
    textAreaPanel.add(list, BorderLayout.EAST);
    pane.add(textAreaPanel);
    pane.add(buttonPanel);

    return pane;
}

很酷的是,您可以将面板嵌套在其他面板中,添加不同的布局管理器以获得所需的布局。

在不相关的说明中,请尝试关注Java naming conventions。而不是JTextArea TextArea使用JTextArea textArea。它使您和阅读代码的人更容易理解它。

答案 3 :(得分:0)

我可以推荐你FormLayout。在我找到这个布局之前,我对GridBagLayout感到非常痛苦。 FormLayout更强大,学习和使用更方便,而且是免费的。给它一个机会。

答案 4 :(得分:0)

正如其他人所说,熟悉布局管理器的概念。有几个标准的Swing API和几个好的第三方API。

此外,您还需要将JList添加到滚动窗格(JScrollPane)。您可能希望考虑将其添加到拆分窗格(JSplitPane)。并且通过考虑我不是说“这样做是因为网络上的某些人这么说”我的意思是“如果对你的最终用户有意义的话就去做”。