当前位置: 首页 > 知识库问答 >
问题:

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

牟焱
2023-03-14

如果我直接在构造函数中添加面板,它可以正常工作,但在控制器中则不行。当我在菜单上点击“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;
    }
}

}

panel对象只有一个jlabel,其中有一个hello要测试

共有1个答案

严兴言
2023-03-14

我回答自己。包()不见了。但是我有一个疑问,为什么重画不起作用,而包起作用呢?

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();
}
 类似资料:
  • 包装呈现值;导入java。util。扫描仪; 公共类PresentValue{ }问题是写一个方法presentValue来执行此计算。该方法应接受未来值、年利率和年数作为参数。它应该返回现值,即您今天需要存入的金额。在一个程序中演示该方法,该程序允许用户试验公式项的不同值。 这里是公式P=F/(1r)^2

  • 我正在尝试构建一个简单的Web应用程序,它接受大量的二进制输入,并计算一个布尔公式,然后输出。我做错了什么? null null

  • 问题内容: 我有一个小问题。我想要一个可以上传和显示图像的Django应用。目前,它可以上传图片,但我无法显示该图片。 因此,例如{{comment.photo}}将打印出path 。但我想在屏幕上看到该图像。不是路径。如何将图像打印到屏幕上? 这里有一些信息可能会有所帮助。 models.py views.py home.html form.html 问题答案: 有关如何正确上传图像的信息,请参

  • 你为什么想要加入我们公司?,这是一道非常高频的互联网大厂前端面试题,但是很多同学在面试时候都回答不好。老规矩,点赞收藏,点点关注支持一下,给我一分钟,理想哥教大家该怎么满分回答这个问题。 虽然大部分同学真实的原因可能是你们公司给的钱多,你们约我面试的,我为了谋生,我想跳个槽等等。但是呢,真实当你在面试的时候是不能这么回答的,你需要让自己的回答更加的高大上一些。 理想哥建议大家可以从下面几个方向去回

  • 本文向大家介绍为什么HTML5里面我们不需要DTD?相关面试题,主要包含被问及为什么HTML5里面我们不需要DTD?时的应答技巧和注意事项,需要的朋友参考一下 先说一下什么是DTD或者说我们为什么在html5之前需要使用DTD 下面是DTD的作用: 通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。 应用程

  • 我试图使一个客户端-服务器包成一个应用程序。因此,当应用程序打开时,服务器会自动进入待机/监听模式。问题是当运行服务器套接字时,它直到之后才显示gui。我希望gui和服务器套接字同时发生。 我已经注释掉了代码行,它按照预期工作,直到 我读过关于线程来解决这个问题的文章,但是我看到的例子都没有给出足够清晰的答案。我对python和编程还是相当陌生的。谢啦