Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调整大小时GUI组件消失_Java_Swing_Paint - Fatal编程技术网

Java 调整大小时GUI组件消失

Java 调整大小时GUI组件消失,java,swing,paint,Java,Swing,Paint,我正在编写一个程序,当按下一个按钮时,该程序将替换GUI的主要组件。为此,我有多个类来扩展一个组件(JScrollPane),然后可以将该组件放入扩展JFrame的主类中 JScrollPane menu; public MenuSystem() { menu = new OpeningMenu(this); setSize(500,500); setLocationRelativeTo(null); setTitle("Menu system"); setDefaultC

我正在编写一个程序,当按下一个按钮时,该程序将替换GUI的主要组件。为此,我有多个类来扩展一个组件(JScrollPane),然后可以将该组件放入扩展JFrame的主类中

JScrollPane menu;

public MenuSystem()
{
  menu = new OpeningMenu(this);
  setSize(500,500);
  setLocationRelativeTo(null);
  setTitle("Menu system");
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  loadInfo();
  pane = getContentPane();
  pane.setLayout(null);
  pane.add(menu);
  setVisible(true);
}

public void changeMenuTo(JScrollPane x)
{
  pane.remove(menu);
  menu = x;
  pane.add(menu);
  pane.repaint();
}
这些代码控制在GUI上显示哪个JScrollPane。我面临两个我认为相关的问题

  • 启动程序时,初始JScrollPane中的某些组件不会出现。我在这个窗格中有几个按钮和一个JLabel,但只有第一个按钮出现。当我的鼠标经过其他按钮时,它们会出现,但在此之前,它们是不可见的。这似乎很奇怪,因为它表明我的构造函数有某种错误。当使用changeMenuTo()方法打开同一窗格时,它看起来非常完美

  • 每当我手动调整屏幕大小时,当前窗格中的所有组件都会消失。这几乎和我第一次启动程序时完全一样,直到我的鼠标经过按钮时,按钮才可见。在这种情况下,第一个按钮也是不可见的


  • 更改布局已修复该问题。谢谢你的建议。

    你还没有发布一个有效的小程序,我们实际上可以编译、运行和修改它,因此很难(如果不是不可能)准确地告诉你为什么你的程序不工作,除了用下面的代码说:
    pane.setLayout(null),你在射自己的脚。这个网站上这么多Swing问题的答案都会告诉你,如果不愚蠢的话,使用空布局是危险的,并且会导致难以调试的错误以及难以创建和维护GUI。2)你真的想使用[CardLayout](())。
    面板。setLayout(null)
    是你的第一个问题为什么你的组件要从JScrollPane扩展,对我来说似乎是个奇怪的想法。您也可以考虑查看卡式布局。