ボタン、ラベル、テーブルなどを追加するJPanel
サブクラスがあります。画面に表示するには、JFrame
を使用します。
MainPanel mainPanel = new MainPanel(); //JPanel subclass
JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
しかし、ウィンドウのサイズを変更しても、パネルのサイズは変わりません。パネルのサイズを変更しても、パネルのサイズをウィンドウのサイズと同じにする方法は?
BorderLayoutのようなレイアウトマネージャーを設定してから、パネルを配置する場所をより具体的に定義できます。
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);
これにより、パネルがフレームの中央領域に配置され、フレームのサイズを変更したときにパネルが自動的に拡大します。
JFrameが使用するレイアウトマネージャーを設定する必要があります-これは、コンポーネントの配置方法を扱います。便利なのはBorderLayoutマネージャーです。
次のコード行を追加するだけで問題が解決するはずです。
mainFrame.setLayout(new BorderLayout());
(JFrameにコンポーネントを追加する前にこれを行います)
友人から提供されたBorderLayoutオプションが機能しない場合は、ComponentListernerをJFrameに追加して、componentResized(event)メソッドを実装してみてください。 JFrameオブジェクトのサイズが変更されると、このメソッドが呼び出されます。したがって、このメソッドでJPanelのサイズを設定するコードを記述すると、意図した結果が得られます。
ええ、私はこの「解決策」が良くないことを知っていますが、それを安全策として使用します。 ;)
私の経験から、GridLayoutを使用しました。
thePanel.setLayout(new GridLayout(a,b,c,d));
a =行番号、b =列番号、c =水平方向のギャップ、d =垂直方向のギャップ。
たとえば、次のようなパネルを作成したい場合:
コードは以下のとおりです。
thePanel.setLayout(new GridLayout(0,1,0,3));
このメソッドは、JScrollPaneをJPanelに追加する場合に便利です。 JScrollPane内のJPanelのサイズは、それにコンポーネントを追加すると自動的に変更されるため、JScrollPaneは自動的にスクロールバーをリセットします。
他のポスターが言ったように、使用されているLayoutManagerを変更する必要があります。私は常にGridLayoutを使用することを好んだので、コードは次のようになります。
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);
パネルが画面全体を占めるようにする場合、GridLayoutは概念的には正しいように見えます。