【问题标题】:Java GUI 3 columns border layoutJava GUI 3 列边框布局
【发布时间】:2016-07-17 18:00:45
【问题描述】:

我正在尝试为我的班级做一个项目。我应该构建 3 列数据。这是一个 GUI 类的代码:

public void displayArray(String[] wordArray) {
    Container myContentPane = project1JFrame.getContentPane();
    TextArea arrayArea = new TextArea();
    for (int i = 0; i < wordArray.length; i++) {
        if (wordArray[i] != null) {
            arrayArea.append(wordArray[i] + "\n"); // add the words of the array into the TextArea
        }
    } //for
    myContentPane.add(arrayArea, BorderLayout.WEST);
    project1JFrame.setVisible(true);

} //displayArray

public void displaySortedArray(String[] wordArray) {
    Container myContentPane = project1JFrame.getContentPane();
    TextArea arrayArea = new TextArea();
    for (int i = 0; i < wordArray.length; i++) {
        if (wordArray[i] != null) {
            arrayArea.append(wordArray[i] + "\n"); // add the words of the array into the TextArea
        }
    } //for
    myContentPane.add(arrayArea, BorderLayout.CENTER);
    project1JFrame.setVisible(true);

} //displaySortedArray

public void displaySortedList(WordList myList) {

    Container myContentPane = project1JFrame.getContentPane();
    TextArea listArea = new TextArea();
    WordListIterator myIt;
    listArea.setText("");
    myIt = myList.reset();

    while (myIt.hasNext()) {
        myList.append(myIt.next() + "\n");
    }
    myContentPane.add(listArea, BorderLayout.EAST);
    project1JFrame.setVisible(true);
}

当我尝试将此代码与我的主程序一起运行时,我只得到 2 列。我想要 3 列。我猜它与边框布局有关,但我似乎做不到。请帮忙!

【问题讨论】:

  • 首先,您应该使用javax.swing.JTextArea 而不是java.awt.TextArea,可能无法解决您当前的问题,但可能会解决其他一些问题
  • 考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将导致更少的混乱和更好的响应

标签: java swing layout-manager


【解决方案1】:

对我来说似乎工作正常......

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());
            add(new JScrollPane(makeTextArea("On the left")), BorderLayout.WEST);
            add(new JScrollPane(makeTextArea("Jam in the middle")), BorderLayout.CENTER);
            add(new JScrollPane(makeTextArea("On the right")), BorderLayout.EAST);
        }

        protected JTextArea makeTextArea(String text) {
            JTextArea ta = new JTextArea(10, 20);
            ta.setText(text);
            return ta;
        }

    }

}

考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应

不过,我会考虑使用GridLayout insead...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridLayout(1, 3));
            add(new JScrollPane(makeTextArea("On the left")), BorderLayout.WEST);
            add(new JScrollPane(makeTextArea("Jam in the middle")), BorderLayout.CENTER);
            add(new JScrollPane(makeTextArea("On the right")), BorderLayout.EAST);
        }

        protected JTextArea makeTextArea(String text) {
            JTextArea ta = new JTextArea(10, 20);
            ta.setText(text);
            return ta;
        }

    }

}

查看How to Use GridLayout了解更多详情

【讨论】:

  • @Harshad Kapoor:也可以考虑BoxLayout,见here
猜你喜欢
  • 2011-09-12
  • 2018-05-03
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多