5

这是我在这里的第一篇文章,如果我做错了什么,请原谅我。

我的问题是:

我正在尝试将组件添加到具有大小等定义值的 JPanel。但是当我将它们添加到面板时,它们绝对没有它们应该具有的大小和位置。例如:

public class Console extends JFrame {
    private JPanel mainPanel = new JPanel();
    private JTextArea textField = new JTextArea();
    private JTextArea textField2 = new JTextArea();

    public Console() {
        this.setSize(500,300);

        this.mainPanel.setSize(this.getWidth(),this.getHeight());

        this.textField.setEditable(false);
        this.textField.setSize(this.mainPanel.getWidth(), 100);
        this.textField.setPreferredSize(new Dimension(this.mainPanel.getWidth(),this.mainPanel.getHeight()));
        this.textField.setLocation(0, 0);
        this.textField.setText("some text");
        this.textField.setVisible(true);

        this.textField2.setSize(this.mainPanel.getWidth(),200);
        this.textField2.setPreferredSize(new Dimension(this.getWidth(),this.getHeight()));
        this.textField2.setLocation(0,this.mainPanel.getHeight()-this.textField.getHeight());
        this.textField2.setText("blabla");
        this.textField2.setVisible(true);

        this.mainPanel.add(textField);
        this.mainPanel.add(textField2);
        this.mainPanel.setVisible(true);

        this.add(this.mainPanel);
        // I know you should not call setVisible() in the Constructor, just for making Code more simple here.
        this.setVisible(true);
    }
}

当我启动应用程序时,两个 JTextArea 都非常小并且在中间某个位置(不是上面设置的),而 mainPanel 是正确的。我尝试在代码中的不同位置调用 setSize() 和 setPreferredSize(),但它没有不工作。据我所知,我知道最好使用 LayoutManager 来执行此操作,但老实说,我不知道如何正确使用它。我在 Oracle Doc 上检查了它,但如果有人可以为此发布一个干净的解决方案,我将不胜感激,在此先感谢。

4

4 回答 4

6

您需要Layout为您的Container. 你setLayout为一个 Container 之类JFrame的,JPanel等等。您不会将其他组件添加到布局中,而是添加到容器中。然后它会相应地布局它们。它就是这样工作的。

使用适当的布局,您无需调用setLocation(). 也setVisible(true)太过分了,因为 true 是代码中这些组件的默认值。

最好不要扩展JFrameJPanel而是扩展并将其添加到 JFrame。

请了解 EDT,SwingUtilities.invoketLater()您需要使用它。

你也可以节省一些字节,而不是this.一直打字。

于 2013-01-14T15:12:12.550 回答
2

这都是关于布局的Swing 布局

于 2013-01-14T15:01:47.457 回答
2

对于您的JTextArea问题,请使用:

       JTextArea j=new JTextArea();
       j.setColumns(20);
       j.setRows(5);

更改 和 的值setColumns()setRows()改变大小;+ 给出的建议Layout Managers

希望这有效;)

于 2013-01-14T15:11:41.337 回答
-1

尝试使用 jpanel 的绝对布局。

于 2013-01-14T16:42:50.600 回答