【问题标题】:Java Positioning a list on a GUIJava 在 GUI 上定位列表
【发布时间】:2010-05-03 17:16:25
【问题描述】:

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

【问题讨论】:

    标签: java user-interface swing jlist


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用BorderLayout 经理将您的TextArealist 包装在一个新面板中。基本上,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】:

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


        (来源:miglayout.com

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-09-27
              • 2010-10-26
              • 1970-01-01
              • 2012-06-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多