1

この件に関する他の投稿を見たことがありますが、彼らが見つけた解決策は私には当てはまりません。加重値を設定し、c.fill = GridBagConstraints.BOTH制約も使用しています。

私の間違いが GridBagLayout 以外のものから来ている場合に備えて、私が持っている GUI コード全体を含めています。

右側のスクロール可能なテキスト ブロックで GUI 内の残りのスペースを拡張したいのですが、それに起因するすべての変数を設定しましたが、まだ機能していません。私は何を間違っていますか?

私の結果:

GridBagLayout の結果

import java.awt.*;
import javax.swing.*;

public class TestCode extends JFrame {
    JTextArea textArea = new JTextArea ();
    JComboBox <String> typeComboBox;
    JTextField searchField;
    JTextField fileField;

    public TestCode(){

        setTitle ("GUI Test");
        setSize (600, 300);
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        setVisible (true);

        JScrollPane scrollPane = new JScrollPane(textArea);

        JButton readButton = new JButton("Read File");
        JButton displayButton = new JButton("Display");
        JButton searchButton = new JButton("Search");


        searchField = new JTextField(10);
        fileField = new JTextField(15);

        typeComboBox = new JComboBox <String> ();
        typeComboBox.addItem("Index");
        typeComboBox.addItem("Type");
        typeComboBox.addItem("Name");




        JPanel container = new JPanel();
            container.setLayout(new GridBagLayout());
            container.setPreferredSize(new Dimension(250, 100));
        JPanel filePanel = new JPanel();
            filePanel.setLayout(new BoxLayout(filePanel, BoxLayout.Y_AXIS));
            filePanel.add(new JLabel("Source file", SwingConstants.LEFT));
                JPanel filePanelTop = new JPanel();
                    filePanelTop.setLayout(new FlowLayout(FlowLayout.LEFT));
                    filePanelTop.add(fileField);
                JPanel filePanelBottom = new JPanel();
                    filePanelBottom.setLayout(new FlowLayout(FlowLayout.RIGHT));
                    filePanelBottom.add(readButton);
                    filePanelBottom.add(displayButton);
            filePanel.add(filePanelTop);
            filePanel.add(filePanelBottom);
            filePanel.setMaximumSize(filePanel.getPreferredSize());
            filePanel.setBorder(BorderFactory.createTitledBorder("Import File"));
        JPanel searchPanel = new JPanel(); 
            searchPanel.setLayout(new BoxLayout(searchPanel, BoxLayout.Y_AXIS));
            searchPanel.add(new JLabel("Search target", SwingConstants.LEFT));
                JPanel searchPanelTop = new JPanel();
                    searchPanelTop.setLayout(new FlowLayout(FlowLayout.LEFT));
                    searchPanelTop.add(searchField);
                    searchPanelTop.add(typeComboBox);
            searchPanel.add(searchPanelTop);
            searchPanel.add(searchButton);
            searchPanel.setMaximumSize(searchPanel.getPreferredSize());
            searchPanel.setBorder(BorderFactory.createTitledBorder("Search Objects"));

          GridBagConstraints c = new GridBagConstraints();
          c.gridx = 0;
          c.gridy = 0;
          container.add(filePanel, c);
          c.gridx = 0;
          c.gridy = 1;
          container.add(searchPanel, c);
          c.gridx = 1;
          c.gridy = 0;
          c.weightx = 1.0;
          c.weighty = 1.0;
          c.gridwidth = GridBagConstraints.REMAINDER;
          c.gridheight = GridBagConstraints.REMAINDER;
          c.fill = GridBagConstraints.BOTH;
          c.anchor = GridBagConstraints.NORTHWEST;
          container.add(scrollPane, c);

        add(container, BorderLayout.WEST);

        validate();

    } // end method toString

    public static void main(String[] args){
        TestCode run = new TestCode();
    }
} // end class Treasure
4

1 に答える 1

7
//add(container, BorderLayout.WEST);
add(container);

West は、コンポーネントを適切な幅に制限します。デフォルトは CENTER で、コンポーネントを拡張して使用可能なスペースを埋めることができます。

また、コードの主な構造が間違っています。最初にすべてのコンポーネントをフレームに追加してから、次を呼び出す必要があります。

frame.pack();
frame.setVisible(true);

その場合、validate() は必要ありません。

于 2013-08-29T23:05:21.203 に答える