java - JPanel 中的组件自动消失

标签 java swing jpanel repaint jung

我有一个JPanel和一个Jlist,当用户在列表中选择不同的项目时,相应的组件将被添加到面板中,而之前的组件将被删除。这是代码的一部分:

depictorPanel.removeAll();
depictorPanel.invalidate();
depictorPanel.repaint();
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
depictorPanel.add(viewer, constraints);
viewer.setSize(depictorPanel.getSize());
depictorPanel.invalidate();
depictorPanel.repaint();

其中describeorPanel是JPanel,查看器是组件(顺便说一句。查看器是来自JUNG库的VisualizationView类型,它也继承了JPanel)。

当我调整 JPanel 的大小(通过调整整个窗口的大小来完成,以便调整窗口中的所有组件的大小),或最小化窗口并恢复它时,查看器组件消失了,因为我设置了描画面板和查看器的不同背景颜色,所以我可以看出。

我还处理了描述面板的componentResized监听器以使查看器无效并重新绘制,但没有运气。

最佳答案

我终于找到了一种使用布局管理器(GridBagLayout)的工作方法:

GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 1;
constraints.weighty = 1;
depictorPanel.add(currentViewer, constraints);
depictorPanel.revalidate();

这段代码达到了我预期的效果。我认为我的问题是没有很好地理解每个单独的布局管理器(因为我对 Java 比较陌生)。

谢谢大家!我确实通过这个问题(和 SSCCE)学到了一些关于 Java 的知识:-)

关于java - JPanel 中的组件自动消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033949/

相关文章:

java - 当光标位于 JDialog 之外时更改光标

java - 以这种方式在JFrame中定位4个JPanel

java - 尝试在 JPanel 上绘制但没有成功

java - MainPanel 不监听嵌套 JPanel 内的 KeyBinding

java - CountDownTimer cancel() 不会取消计时器并继续工作

Java IndexOutOfBoundsException 抛出,不确定原因

java - JOptionPane 不会关闭

java - 尽管有流程布局,图像仍彼此堆叠?

java - 如何在 Java 的 Native HTTP Client 上使用代理密码身份验证

swing - Scala Swing 所有按钮宽度相同