0

設定ファイルから複数のオプションを一覧表示するJDialogボックスを表示するプログラムを作成しています。オプションの数は開くたびに変わる可能性があるため、ウィンドウの幅ではなく高さを動的に調整できる必要があります。FlowLayoutを使用し、ウィンドウの幅を定義して、データが適切に折り返されるようにウィンドウを最適に表示します。しかし、高さを動的に調整することはできません。packメソッドを使用しようとしましたが、FlowLayoutのように、すべてのパネルが1行に並んでいます。GridLayoutを試しましたが、すべてのパネルのサイズが同じサイズに変更され、見た目が悪くなります。BoxLayoutも試しましたが、それを機能させることができませんでした。

使用するより良いレイアウトマネージャーや幅を静的にする方法はありますか?

これが私のコードです。すべてのパネルとボックスはコンストラクターの上に定義されています。私はそのコードをコピーしませんでした。

public ReSizeMe()
    {
        curConfig = new Config();
        config = curConfig.getConfig();

        setBox = new JDialog();

        setBox.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);  //  Set as 480, 600
        setBox.setLayout(new FlowLayout());

        this.buildSetFrame();

        //setBox.pack();
        setBox.setVisible(true);
    }

    public void buildSetFrame()
    {
        intPanel   = new JPanel();
        butPanel   = new JPanel();
        optPanel   = new JPanel();
        editPanel  = new JPanel[maxOptions];
        optWrapper = new JPanel[maxOptions];

        intPanel.setLayout(new FlowLayout());
        optPanel.setLayout(new GridLayout(10, 1));   //  trying different things here too.

        optText = new JTextField[maxOptions];
        editButton = new JButton[maxOptions];
        delButton = new JButton[maxOptions];

        intPanel.setBorder(BorderFactory.createTitledBorder("Modify Interface"));

        apply  = new JButton("Apply");
        newOpt = new JButton("New Option");
        help   = new JButton("Help");
        close  = new JButton("Close");

        intPanel.add(ethIntLabel);
        intPanel.add(ethIntName);

        butPanel.add(apply);
        butPanel.add(newOpt);
        butPanel.add(close);

        ethIntName.setText(config.getProperty("EthIntName"));

        setBox.add(welcomeMsg);
        setBox.add(intPanel);
        setBox.add(optPanel);

        buildOptions();

        setBox.add(butPanel);
    }

    void buildOptions()
    {
        for (int i = 0; i < maxOptions; i++)
        {
            editable = Boolean.parseBoolean(config.getProperty("option." + i + ".edit"));

            if (config.getProperty("option." + i + ".name") == null)
            {
                break;
            }
            else if (editable != false && 
                     config.getProperty("option." + i + ".name") != null && 
                     !config.getProperty("option." + i + ".name").isEmpty())
            {

                editPanel[i]  = new JPanel();
                optWrapper[i] = new JPanel();
                optText[i]    = new JTextField(20);
                editButton[i] = new JButton("Edit");
                delButton[i]  = new JButton("Delete");

                editButton[i].setActionCommand(Integer.toString(i));
                delButton[i].setActionCommand(Integer.toString(i));

                optText[i].setText(config.getProperty("option." + i + ".name"));
                optText[i].setEditable(false);
                editPanel[i].add(editButton[i]);
                editPanel[i].add(delButton[i]);
                optWrapper[i].add(optText[i]);
                optWrapper[i].add(editPanel[i]);
                optPanel.add(optWrapper[i]);
            }
        } 
    }
4

1 に答える 1

3

はい、Boxうまくいくはずです:

Box box = Box.createVerticalBox();
box.add(...)
box.add(Box.createVerticalStrut(5)); // spacing
<etc.>

add(box);
于 2013-02-03T09:13:29.180 に答える