Java : Miglayout : 'hidemode'를 사용하는 방법?
-
19-09-2019 - |
문제
나는 사용을 시작하고있다 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();
}
}