java - 如何在 JFrame 内的 JPanel 内显示 JPanel?
问题描述
我正在尝试在 JPanel 内显示一个 JPanel 类,该类设置在 JFrame 类内的 JPanel 内显示的 JPanel 类内。
让 JPanel 类显示在 JFrame 类中是可行的,但是当我尝试在第一个 JPanel 类中显示另一个 JPanel 类时,它不会显示。
我正在使用带有 GUI Builder 插件的 Netbeans 8.2,如果有任何更好的方法可以在需要时显示这些嵌套的 GUI 元素,我也将不胜感激。
JFrame:
public class MitarbeiterUI extends javax.swing.JFrame {
private javax.swing.JPanel container;
public MitarbeiterUI(Mitarbeiter mitarbt) {
initComponents();
setExtendedState(MAXIMIZED_BOTH);
}
private void initComponents() {
//Auto generated initializer
}
private void TarifButtonActionPerformed(java.awt.event.ActionEvent evt) {
TarifDialog dialog = new TarifDialog(this);
dialog.setVisible(true);
container.removeAll();
container.validate();
container.updateUI();
container.add(dialog);
}
public void updatePanel(JPanel panel) {
container.removeAll();
container.validate();
container.updateUI();
container.add(panel);
}
}
主要的JPanel:
public class TarifDialog extends javax.swing.JPanel {
private Boolean sPanelVisible = false;
private Boolean wPanelVisible = false;
private Boolean ePanelVisible = false;
private KontinuierlicherTarifDialog kdialog; //Nested JDialog class
private EinmaligerTarifDialog edialog; //Nested JDialog class
private MitarbeiterUI parent;
private javax.swing.JPanel pnContainer;
private javax.swing.JRadioButton rbEinmaligerTarif;
private javax.swing.JRadioButton rbStandardTarif;
private javax.swing.JRadioButton rbWiederkehrenderTarif;
public TarifDialog(MitarbeiterUI parent) {
this.parent = parent;
initComponents();
}
private void initComponents() {
//Auto generated initializer
}
private void rbWiederkehrenderTarifStateChanged(javax.swing.event.ChangeEvent evt) {
if (rbWiederkehrenderTarif.isSelected() && !wPanelVisible) {
kdialog = new KontinuierlicherTarifDialog();
kdialog.setVisible(true);
pnContainer.removeAll();
pnContainer.validate();
pnContainer.updateUI();
pnContainer.add(kdialog);
ePanelVisible = false;
wPanelVisible = true;
sPanelVisible = false;
parent.updatePanel(this);
}
}
private void rbEinmaligerTarifStateChanged(javax.swing.event.ChangeEvent evt) {
if (rbEinmaligerTarif.isSelected() && !ePanelVisible) {
edialog = new EinmaligerTarifDialog();
edialog.setVisible(true);
pnContainer.removeAll();
pnContainer.validate();
pnContainer.updateUI();
pnContainer.add(edialog);
ePanelVisible = true;
wPanelVisible = false;
sPanelVisible = false;
parent.updatePanel(this);
}
}
private void rbStandardTarifStateChanged(javax.swing.event.ChangeEvent evt) {
if (rbStandardTarif.isSelected() && !sPanelVisible) {
pnContainer.removeAll();
pnContainer.validate();
pnContainer.updateUI();
ePanelVisible = false;
wPanelVisible = false;
sPanelVisible = true;
parent.updatePanel(this);
}
}
}
嵌套的 FPanel 类之一:
public class EinmaligerTarifDialog extends javax.swing.JPanel {
public EinmaligerTarifDialog() {
initComponents();
this.setVisible((true));
}
private void initComponents() {
//Auto generated initializer
}
}
解决方案
推荐阅读
- javascript - Capturing QRCode image from web-whatsapp
- r - 如何在 R 中使用 for 循环处理数据帧?
- react-native - React Native 如何创建一个 createStackNavigator
- python - 如何在正在运行的python程序中获取变量?
- android - 如何使android清单文件大小更小?
- php - 分页不能按预期工作 uisng laravel 和 jq
- google-app-engine - 关于对象化事务重试的困惑
- python - 使用 pandas 更改 csv 中的日期格式
- c - 人们如何在 C89 中检查 nan 和 inf
- mysql-workbench - how to make looping for select syntax in mysql