14

GUI 設計にMiGLayoutの使用を開始しています。必要な機能の 1 つは、他のコンポーネントの状態に基づいて特定のコンポーネントを表示/非表示にすることです。

MiGLayout でサポートされているコンポーネント制約の 1 つがhidemode.

これは私が思うことをしますか?もしそうなら、が設定されていると仮定して、どのように非表示/再表示アクションをトリガーしhidemodeますか? (ドキュメントを調べた後、 を設定する方法を見つけることができましたがhidemode、その後の使用方法はわかりませんでした)


hidemode

コンポーネントの非表示モードを設定します。この非表示モードは、コンポーネント コンストレイントによってオーバーライドできます。非表示モードは、レイアウト マネージャーが非表示のコンポーネントを処理する方法を指定します。モードは次のとおりです。

0 - デフォルト。非表示のコンポーネントが、表示されているかのように正確に処理されることを意味します。
1 - コンポーネントのサイズ (非表示の場合) は 0, 0 に設定されます。
2 - コンポーネントのサイズ (非表示の場合) は 0, 0 に設定され、その周りのギャップも 0 に設定されます。
3 - 非表示のコンポーネントはレイアウトにまったく参加せず、たとえばグリッド セルを占有しません。
例: 「ハイドモード 1」

4

2 に答える 2

7

このに示すように、コンポーネントが検証されると、モードが適用されます。のメソッドは、初期レイアウトを実行するために呼び出す を呼び出します。その後、hideButton がを呼び出し、コンテナーのレイアウトを再計算して、新しい表示設定を反映します。レイアウト管理の仕組みも参照してください。JFrameinitGUI()pack()validate()ActionListenervalidate()

于 2010-01-08T12:44:51.750 に答える
2

MigLayouthidemodeは、さまざまなビューがあり、アクティブなビューのみを表示したい場合に便利です。デフォルトでは、表示されていなくても、各ビューはレイアウト内のスペースを占有します。

例:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

import net.miginfocom.swing.MigLayout;

@SuppressWarnings("serial")
public class MigHidemode extends JPanel {

    private class RadioActionListener implements ActionListener {
        public void actionPerformed(final ActionEvent e) {
            final boolean showA = aRadio.isSelected();
            field.setVisible(showA);
            combo.setVisible(!showA);
        }
    }

    public static void main(final String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

                    final JDialog dialog = new JDialog();

                    final Container contentPane = dialog.getContentPane();
                    contentPane.setLayout(new BorderLayout());
                    contentPane.add(new MigHidemode(), BorderLayout.CENTER);

                    dialog.addWindowListener(new WindowAdapter() {
                        @Override
                        public void windowClosed(final WindowEvent e) {
                            System.exit(0);
                        }
                    });
                    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                    dialog.pack();
                    dialog.setLocationRelativeTo(null);
                    dialog.setVisible(true);
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private final JTextField field;
    private final JRadioButton aRadio;
    private final JRadioButton bRadio;

    private final JComboBox<String> combo;

    public MigHidemode() {
        setLayout(new MigLayout("", "[]", "[][]"));

        final RadioActionListener radioListener = new RadioActionListener();

        aRadio = new JRadioButton("A");
        aRadio.addActionListener(radioListener);
        add(aRadio, "flowx,cell 0 0");

        bRadio = new JRadioButton("B");
        bRadio.addActionListener(radioListener);
        add(bRadio, "cell 0 0");

        field = new JTextField();
        add(field, "cell 0 1,hidemode 3");
        field.setColumns(20);

        combo = new JComboBox<String>();
        combo.setModel(new DefaultComboBoxModel<String>(new String[] {
            "hello",
            "world" }));
        add(combo, "cell 0 1,hidemode 3");

        final ButtonGroup bg = new ButtonGroup();
        bg.add(aRadio);
        bg.add(bRadio);
        aRadio.doClick();
    }
}
于 2012-07-19T23:57:07.373 に答える