1

我正在尝试将 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;
}
4

5 回答 5

2

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

于 2010-05-03T23:57:23.173 回答
1

使用BorderLayoutTextArea管理器将您的和包装list在一个新面板中。基本上,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 命名约定。而不是JTextArea TextArea使用JTextArea textArea. 它使您和阅读您的代码的人更容易理解它。

于 2010-05-03T22:00:21.727 回答
1

您可以使用像Mig Layout这样的布局管理器来进行这种定位。

替代文字
(来源:miglayout.com

于 2010-05-03T17:19:40.863 回答
0

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

于 2010-05-03T19:48:54.087 回答
0

正如其他人建议的那样,熟悉布局管理器的概念。标准 Swing API 附带了几个,还有几个不错的 3rd 方 API。

此外,您还需要将其添加JList到滚动窗格 ( JScrollPane)。您可能需要考虑将其添加到拆分窗格 ( JSplitPane)。考虑一下,我的意思不是“因为网上有人这么说就去做”,我的意思是“如果它对您的最终用户有意义就去做”。

于 2010-05-04T19:59:40.333 回答