无法在NetBeans GUI中将形状绘制到特定面板

时间:2017-12-06 21:25:10

标签: java swing netbeans jpanel

我正在尝试制作一个简单的应用程序,以便将形状绘制到jFrame的面板中。 GUI是生成的NetBeans jFrame。该应用程序有三个面板。前两个按住按钮组以选择形状和颜色。一旦做出选择,就会有一个按钮将形状绘制到第三个面板。

What the GUI looks like

不幸的是,我没有爱,也无法让它发挥作用。现在我只想让按钮绘制一个形状,然后我将添加按钮功能。这是我到目前为止的代码。

private void btnDrawShapeActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:

    Draw shape = new Draw();

    pnlDrawPad.add(shape); //pnlDrawPad is the name of the jPanel

    shape.drawing();

}


import javax.swing.*;
import java.awt.*;

public class Draw extends JPanel{

public Draw(){
    super();
}

public void drawing(){
    repaint();
}

//@Override <-- gives error "method does not override or implement a method from a supertype" 
public void paintCompnent(Graphics g){

    super.paintComponent(g);

    g.setColor(Color.RED);
    g.drawString("Hello World!",40,30);
}

}

当我点击“绘制形状”按钮时,没有任何反应。我一直在寻找几天,但我找不到答案。实际上,它使我对如何做更加困惑。

如何处理?

2 个答案:

答案 0 :(得分:0)

不要继续为每个形状创建新面板。

相反,您需要一个带有要绘制的对象的ArrayList的面板。然后,您自定义面板的paintComponent(...)方法,以迭代面板中的所有对象并绘制它们。

因此,您只需将另一个对象添加到ArrayList,然后在面板上调用repaint()。

结帐Custom Painting ApproachesDrawOnComponent示例演示了如何从ArrayList中绘制Rectangle对象以使您入门。

答案 1 :(得分:0)

我发现使用NetBeans,您不需要覆盖paintComponents()方法。由于所有GUI内容都是在您设计时完成的,因此您只需将图纸添加到面板或您需要做什么。我通过声明并实例化2D图形对象然后将其绘制到您想要的位置来找到您。

private void btnDrawShapeActionPerformed(java.awt.event.ActionEvent evt) {     

int centerX;    
int centerY; 

Graphics2D drawFx = (Graphics2D)pnlDrawPad.getGraphics();

drawFx.setColor(Color.ORANGE);

centerX = (int)(458*Math.random());
centerY = (int)(440*Math.random());

drawFx.fillOval(centerX-50, centerY-50, 100, 100);

drawFx.dispose();

}

像魅力一样工作现在每次按下绘制形状按钮时,每次都会在不同的位置为面板绘制一个形状。我已经放入了单选按钮功能来改变形状颜色和填充,并添加了一个按钮来清除屏幕。

不确定这是否是理想的做法,但对于这个愚蠢的简单小程序,它运作得很好,我已经完成了它的压力。

相关问题