1

次のコード スニペットを使用すると、BorderLayout Manager を使用して JTextfield と 2 つの JButton を JPanel に配置できます。

        JPanel strPanel = new ButtonPanel();
        strPanel.setLayout(new BorderLayout());
        setBorder( new EmptyBorder( 3, 3, 3, 3 ) );

        strfield = new JTextField("",70);
        strPanel.add("West", strfield);
        strPanel.add("Center", btnCopy);
        strPanel.add("East", btnPaste);
        add("North", strPanel);

ここにスクリーンショットがあります

ここに画像の説明を入力

ただし、キッカーは、JFrame のサイズを変更すると「コピー」ボタンが拡大されますが、コピーと貼り付けのボタンを同じサイズのままにして、代わりに JTextField を拡大したいということです。更新されたスクリーンショットは次のとおりです。

ここに画像の説明を入力

試して修正するために、NetBeans などをダウンロードし、GUI デザイナーで遊んでみましたが、別のレイアウト マネージャーを使用しても解決できません。

誰かが光を当てることができますか?ありがとう

4

1 に答える 1

6

BorderLayoutCENTER残りのすべてのスペースをコンポーネントに与えるため、このタスクには適していません。レイアウトを変更できる場合GridBagLayout、左端のコンポーネントに残りのスペースをすべて与えるのは簡単です。

例:

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");
    frame.setLayout(new GridBagLayout());

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1;

    frame.add(new JTextArea("Hello World!"), gbc);

    gbc.weightx = 0;
    frame.add(new JButton("Copy"), gbc);
    frame.add(new JButton("Paste"), gbc);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

本当に を使用したい場合はBorderLayout、ボタンをグループ化して東に追加し、テキスト フィールドを中央に追加して、次のようにします。

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");

    frame.add(new JTextArea("Hello World!"), BorderLayout.CENTER);
    frame.add(new JPanel(new GridLayout(1, 0)) {{
        add(new JButton("Copy"));
        add(new JButton("Paste"));
    }}, BorderLayout.EAST);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

}
于 2012-07-24T21:03:03.937 に答える