문제

나는 사용을 시작하고있다 Miglayout 내 GUI 디자인과 필요한 기능 중 하나는 다른 구성 요소의 상태를 기반으로 특정 구성 요소를 표시/숨기는 것입니다.

나는 그 중 하나를 알아 차렸을 때 이것을 직접 코딩하려고했다. 구성 요소 제약 Miglayout이 지원합니다 hidemode.

이것이 내가 생각하는 일을합니까? 그렇다면 어떻게 hidemode 설정 되었습니까? (문서를 살펴본 후 설정 방법을 찾을 수있었습니다. hidemode, 그러나 그 후에 어떻게 사용되는지는 아닙니다)


hidemode

구성 요소의 숨기기 모드를 설정합니다. 이 숨기기 모드에서 숨기기 모드가 지정된 경우 구성 요소 제한 조건에 의해 재정의 될 수 있습니다. 숨기기 모드는 레이아웃 관리자가 보이지 않는 구성 요소를 처리하는 방법을 지정했습니다. 모드는 다음과 같습니다.

0- 기본값. 보이지 않는 구성 요소는 보이는 것처럼 정확하게 처리됩니다.
1- 구성 요소의 크기 (보이지 않는 경우)는 0, 0으로 설정됩니다.
2- 구성 요소의 크기 (보이지 않는 경우)는 0, 0으로 설정되고 간격은 그 주위에 0으로 설정됩니다.
3- 보이지 않는 구성 요소는 레이아웃에 전혀 참여하지 않으며 예를 들어 그리드 셀을 차지하지 않습니다.
예 : "Hidemode 1"

도움이 되었습니까?

해결책

구성 요소가있을 때 모드가 적용됩니다 검증되었습니다, 이것에서 볼 수 있듯이 예시. 그만큼 JFrame'에스 initGUI() 방법 호출 pack(), 호출합니다 validate() 초기 레이아웃을 수행합니다. 나중에 Hidebutton 's ActionListener 전화 validate(), 새로운 가시성 설정을 반영하기 위해 컨테이너의 레이아웃을 다시 계산합니다. 또한보십시오, 레이아웃 관리의 작동 방식.

다른 팁

Miglayout 's 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