質問

使い始めています MiGレイアウト 私の GUI デザインでは、必要な機能の 1 つは、他のコンポーネントの状態に基づいて特定のコンポーネントを表示/非表示にすることです。

これを自分でコード化しようとしていたところ、次のいずれかに気づきました。 コンポーネントの制約 MiGLayout でサポートされているのは hidemode.

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


hidemode

コンポーネントの非表示モードを設定します。非表示モードが で指定されている場合、この非表示モードはコンポーネント制約によってオーバーライドできます。非表示モードは、レイアウト マネージャーが表示されていないコンポーネントをどのように処理するかを指定します。モードは次のとおりです。

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

役に立ちましたか?

解決

このモードは、コンポーネントが次の場合に適用されます。 検証済み, 、これに見られるように . 。の JFrameさんの initGUI() メソッド呼び出し pack(), を呼び出す validate() 初期レイアウトを行います。その後、 HideButton の ActionListener 電話 validate(), これにより、コンテナのレイアウトが再計算され、新しい表示設定が反映されます。こちらも参照してください。 レイアウト管理の仕組み.

他のヒント

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

例:

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();
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top