是否可以在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,可以用于图形。 这里有一个简单的例子,展示了如何使用它。