2013-10-13 52 views
2

我有一个画布,我想绘制一个基于JButton点击的矩形。Graphics G用另一种方法

因此,换句话说,

private void jb_drawActionPerformed(ActionEvent evt) {           
    // draw a rectangle method 
}  

基本上,我怎么encorporate该方法中的疼痛(图形G)thingamagic?或者我应该使矩形成为一个对象,并从该对象中调用“渲染”方法?如果是这样,有人可以链接一个tut?

private void jb_drawActionPerformed(ActionEvent evt) {           
    myrectange.render(x,y); // ???? 
} 
+0

切勿尝试调用'油漆(图形G)'自己,总是委托这打电话给'repaint'。 1)在你的'jb_drawActionPerformed'方法中调用'repaint()'。 2)重写'paintComponent(Graphics g)'并在该方法中绘制矩形。第一个电话最终会触发第二个电话。顺便说一句,你应该总是重写'paintComponent'并且不要重写'paint(Graphics g)'。 –

回答

4

一般性意见和建议

  • 方式一:画在一个BufferedImage,让您的显卡从BufferedImage对象,然后在JComponent中的应用BufferedImage的paintComponent方法(JPanel的?)。
  • 如果这样做,您将使用从BufferedImage直接获取的Graphics对象来执行绘制。
  • 不要忘记处理完这个Graphics对象。
  • 实际绘图虽然在JPanel的paintComponent(...)方法中完成(见下文)。
  • 另一种方法:更改类字段,并让JPanel的paintComponent方法在绘画时使用该字段。例如,如果要绘制多个矩形,请在ActionListener中创建一个ArrayList<Rectangle>添加到它,请调用repaint(),并让paintComponent(...)方法遍历列表,并绘制矩形。
  • 请注意,paintComponent(...)方法不会直接调用,而是建议JVM通过调用repaint()来调用它。
  • 永远不要处置由JVM给您的图形对象,例如传递给参数paintComponent(Graphics g)的图形对象。

链接

+0

谢谢!非常有帮助 – Killerpixler

+0

@Killerpixler:不客气! –