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 は正しいです。動作しません。私が聞いた限り、これを行うには LayoutManager を使用する方が良いことはわかっていますが、正直なところ、正しく使用する方法がわかりません。Oracle Docで確認しましたが、誰かがこれに対するクリーンなソリューションを投稿していただければ幸いです。よろしくお願いします。

4

4 に答える 4

6

に適切な設定を行う必要がありLayoutますContainer。などのsetLayoutコンテナの場合。他のコンポーネントをレイアウトに追加するのではなく、コンテナーに追加します。次に、それに応じてそれらをレイアウトします。それがどのように機能するかです。JFrameJPanel

適切なレイアウトがあれば、呼び出す必要はありませんsetLocation()。またsetVisible(true)、 true はコード内のコンポーネントのデフォルト値であるため、過剰です。

を拡張せず、代わりJFrameに拡張JPanelして JFrame に追加することをお勧めします。

EDT について学び、SwingUtilities.invoketLater()それを使用する必要があります。

また、常に入力するのではなく、数バイトを節約できますthis.

于 2013-01-14T15:12:12.550 に答える
2

JTextArea問題には、次を使用します。

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

setColumns()との値を変更setRows()してサイズを変更します。+ について与えられた提案Layout Managers

これがうまくいくことを願っています;)

于 2013-01-14T15:11:41.337 に答える
2

レイアウトSwing レイアウトがすべてです。

于 2013-01-14T15:01:47.457 に答える
-1

jpanelの絶対レイアウトを使用してみてください。

于 2013-01-14T16:42:50.600 に答える