如果我直接在构造函数中添加面板,它可以正常工作,但是控制器没有。 当我在菜单上点击其中一个选项" 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,用于测试
答案 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();
}