是否可以在JFrame上绘制图像或文本?

时间:2011-03-31 13:32:17

标签: java swing jframe

是否可以在JFrame上绘制而不向其添加JPanel

我覆盖paintComponents()但它没有显示任何内容。

 @Override
public void paintComponents(Graphics g) {
    super.paintComponents(g);
    g.drawString("for test", 10, 10);
}

4 个答案:

答案 0 :(得分:3)

以防任何人仍然坚持直接在顶层窗口上绘画(推荐),这里是如何(因为在另一个答案中链接的code snippet只是简单错了)

    JFrame frame = new JFrame("funny ...") {

       @Override
       public void paint(Graphics g) {
           super.paint(g);
           g.drawString("for test", 150, 150);
       }

    };
    frame.getRootPane().setOpaque(false);
    ((JComponent) frame.getContentPane()).setOpaque(false);

显然,要让它一直闪耀,上面的所有内容(按Z顺序)都必须是不透明的。

干杯 珍

答案 1 :(得分:2)

似乎有可能。检查this之前的SO帖子,了解如何完成。

答案 2 :(得分:2)

JFrames上面有一个GlassPane,可以用于图形。 Here您有一个简单的示例,说明如何使用它。

答案 3 :(得分:2)

是的,确实如此。您需要使用JFrame中的其中一个窗格,例如内容窗格或glass pane,您可以通过getContentPane等访问这些窗格。

例如,内容窗格是Container,具有各种添加方法。为此你可以添加任何Component - 不一定是专门的JPanel。更多信息Using Top Level Containers

通常,绘图是通过覆盖绘制(对于AWT)或paintComponent(对于Swing)来完成的。这意味着您需要放置在框架中的某种组件或JComponent。更多2D Graphics教程。为什么你不想改变它?

您还可以覆盖JFrame及其内容窗格,并使用覆盖paintComponent方法的内容窗格。

然而,我质疑直接绘制JFrame的必要性和智慧。