【问题标题】:How to draw an ellipse on top of Panel?如何在 Panel 上画一个椭圆?
【发布时间】:2016-09-15 21:45:16
【问题描述】:

我正在尝试编写一个类似于Karnaugh Map 的应用程序,并且我想绘制一个椭圆来包围一组数字。

我有一个JFrame,它有一个JPanel 和一个GridLayout,我在其中添加了几个其他面板。所以,最后,我有一个类似网格的界面。我希望椭圆位于这些面板的顶部。

我正在尝试使用Graphics2Ddraw() 方法,但我什至无法理解如何实例化Graphics2D 对象。

我所做的是:用GridLayoutJPanel获取Graphics对象,然后

g 是图形对象。

Graphics2D g2 = (Graphics2D) g;

g2.draw(new Ellipse2D.Double(x, y,rectwidth,rectheight));

然后repaint() gridlayout 面板,但什么也没发生,也没有抛出异常或任何东西。

我做错了什么?

【问题讨论】:

  • 您不应该实例化Graphics2D,您应该从JPanel 覆盖paintComponent(Graphics),并在那里进行绘图。见这里:stackoverflow.com/questions/2509561/…
  • 哦,谢谢,但是java如何管理paintComponent(Graphics)?我的意思是,我可以随时调用它吗?
  • 每次重新绘制组件时都会自动调用此方法。当您确实需要手动触发重绘时,您可以调用 repaint(),但我认为您不必这样做。
  • 我明白了,我会努力做到的。谢谢!
  • 查找glassPaneJLayer,对应exampleexampleexample

标签: java swing


【解决方案1】:

基本思想在Performing Custom Painting 中进行了检查。该方法是覆盖合适的JComponentpaintComponent() 方法,并在询问时相对于当前大小呈现您的内容。这个example 抽数字;这个example 说明了适合这种map 的重叠半透明形状。

或者,添加合适的组件,例如JLabelJButton,到 GridLayout,如图所示 here。在 JLayer 包裹的 LayerUI 中渲染所需的形状,如 How to Decorate Components with the JLayer ClassMadProgrammer 引用的 here 示例所示:hereherehere

【讨论】:

  • 您的“此处引用的示例”链接指向您的答案,而不是 MadProgrammer 的答案。
  • @BileshGanguly:感谢您的帮助编辑;虽然评论链接是正确的,但我已经编辑了答案以包含示例cited
  • 谢谢大家,我没有很好地使用 Graphics 对象,我可以用它做我想做的事。
  • 很高兴你让它工作了;这个相关的example 绘制在玻璃窗格上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多