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

是否可以在不添加JPanel情况下在JFrame上绘图?

我重写paintComponents()但它没有显示任何内容。

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

是的。 您将需要使用JFrame中的一个窗格,例如内容窗格或玻璃窗格 ,您可以通过getContentPane等访问它们。

例如,内容窗格是Container ,具有各种添加方法。 为此,您可以添加任何组件 – 不必专门为JPanel。 更多关于使用顶级容器的信息 。

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

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

但是,我怀疑直接绘制JFrame的必要性和智慧。

为了防止任何人仍坚持直接在顶层窗口上绘画(这是推荐的),这里是如何(因为链接到其他答案的代码片段是完全错误的)

  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顺序)都必须是不透明的。

干杯珍妮特

这似乎是可能的。 检查此前的SOpost,看看它是如何完成的。

JFrames上面有一个GlassPane,可以用于图形。 这里有一个简单的例子,展示了如何使用它。