【问题标题】:JPanel placed Behind JScrollPanelJPanel 放在 JScrollPane 后面
【发布时间】:2012-11-26 17:24:59
【问题描述】:

我有这段代码,其中Canvas 是我创建的一个扩展JPanel 的类,它包含一个图像。但是当我使用它时,它不会将画布放在JScrollPane 的顶部,而是放在它的后面。为什么要这样做?

以下是 ScrollPanel 的创建方式:

imagePane.setBackground(new java.awt.Color(153, 153, 153));
imagePane.setBorder(null);
jSplitPane2.setRightComponent(imagePane);

这是我的面板在 ScrollPanel 中的位置

Canvas canvas = new Canvas();
canvas.setVisible(true);
canvas.setImage(file);
imagePane.setLayout(new GridBagLayout());
canvas.setSizeFromLoaded();
imagePane.add(canvas);
imagePane.repaint();

canvas 类不会对 Panel 的放置做任何事情,它所做的只是构建和修改它。我确实有一个JPanel 并且它工作,但是一旦我用JScrollPanel 切换它,它就开始将画布放在它后面。

【问题讨论】:

  • 这是如何创建 ScrollPanel 的jSplitPane2.setRightComponent(imagePane);??? splitPane 还是 scrollPane?为了尽快获得更好的帮助,请发帖SSCCE
  • imagePane = ScrollPane :: jSplitPane2 = SplitPane :: canvas = Panel

标签: java swing jpanel mixing java-canvas


【解决方案1】:

【讨论】:

  • 它不是真正的 Canvas。这是我创建的一个扩展 JPanel 的类
  • Canvas 是保留的 AWT 类,然后必须如前所述发布 SSCCE,供 Bu
【解决方案2】:

确保您使用的是所有轻量级组件(JPanel、JScrollPane 等)。我知道您命名了您自己的 JPanel Canvas 子类,但由于 Canvas 和 ScrollPane 是 AWT 类,因此在您的代码和描述中有些混乱。

在您的 cmets 中,您说 imagePane 是一个 ScrollPane(我假设您的意思是 JScrollPane)。如果是这样,那么 imagePane.setLayout 是不合适的,应该被删除。您的代码应如下所示:

Canvas canvas = new Canvas();
canvas.setImage( someImageFile );
canvas.setSizeFromLoaded();

JScrollPane imagePane new JScrollPane( canvas );
imagePane.setBackground(new java.awt.Color(153, 153, 153));
imagePane.setBorder( null );

jSplitPane2.setRightComponent( imagePane );

只要 setSetFromLoaded() 能够根据图像的大小设置画布的 PreferredSize,这将起作用。如果由于图像尚未加载而尚未准备好计算其大小(请记住,这通常发生在另一个线程上),那么您可能需要将计算移至 validate() 并在稍后进行。例如,为什么重写 doLayout() 你可以在组件被 revalidated() 时计算你的首选大小。您还应该考虑继承 JComponent 而不是 JPanel,因为您不需要添加任何子级。 JComponent 和 JPanel 一样。

【讨论】:

    【解决方案3】:

    我想解决的问题是使用这个:
    imagePane.getViewport().add(canvas);

    而不是这个:
    imagePane.add(canvas);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多