为什么没有显示我想要的面板?

时间:2018-01-30 08:11:31

标签: java netbeans jframe

如果我直接在构造函数中添加面板,它可以正常工作,但是控制器没有。 当我在菜单上点击其中一个选项" Reservas"或" Contabilidad"我想更改显示的面板并查看其他内容。

这是我的观点

public class Vista extends JFrame{
private JMenuBar barraMenu=new JMenuBar();
private JMenu menu=new JMenu("Opciones");
private JMenuItem reservas=new JMenuItem("Reservas");
private JMenuItem contabilidad=new JMenuItem("Contabilidad");
private JMenuItem salir=new JMenuItem("Salir");
private Controlador controlador;
private Reservas panelReservas=new Reservas();
private Contabilidad panelContabilidad=new Contabilidad();

public Vista(Controlador controlador){
    super("Reservas Hotel");
    this.controlador=controlador;
    this.setLayout(new BorderLayout());
    this.setSize(600,500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setJMenuBar(barraMenu);
    this.crearMenu();
    this.anadirEscuchadores();
    this.setVisible(true);
}

private void crearMenu() {
    menu.add(reservas);
    menu.add(contabilidad);
    menu.add(salir);
    barraMenu.add(menu);
}

private void anadirEscuchadores() {
    reservas.addActionListener(controlador);
    contabilidad.addActionListener(controlador);
    salir.addActionListener(controlador);
}

public void cambiarAReservas() {
    this.remove(panelContabilidad);
    this.add(panelReservas, BorderLayout.CENTER);
}

public void cambiarAContabilidad() {
    this.remove(panelReservas);
    this.add(panelContabilidad, BorderLayout.CENTER);
}

}

这是我的控制器

public class Controlador implements ActionListener{
private Vista vista;
private GestorBD modelo;

public Controlador(){
    vista=new Vista(this);
    modelo=new GestorBD();
}

@Override
public void actionPerformed(ActionEvent evento) {
    switch(evento.getActionCommand()){
        case "Reservas":
            vista.cambiarAReservas();
            break;
        case "Contabilidad":
            vista.cambiarAContabilidad();
            break;
        case "Salir":
            System.exit(0);
            break;
    }
}

}

面板对象只有一个带有hello的jlabel,用于测试

1 个答案:

答案 0 :(得分:0)

我自己回答。 .pack()丢失了。 但我有疑问,为什么不与重画一起工作,但它与包有关吗?

public void cambiarAReservas() {
    this.remove(panelContabilidad);
    this.add(panelReservas, BorderLayout.CENTER);
    this.pack();
}

public void cambiarAContabilidad() {
    this.remove(panelReservas);
    this.add(panelContabilidad, BorderLayout.CENTER);
    this.pack();
}