我正在尝试制作一个简单的应用程序,以便将形状绘制到jFrame
的面板中。 GUI是生成的NetBeans jFrame
。该应用程序有三个面板。前两个按住按钮组以选择形状和颜色。一旦做出选择,就会有一个按钮将形状绘制到第三个面板。
不幸的是,我没有爱,也无法让它发挥作用。现在我只想让按钮绘制一个形状,然后我将添加按钮功能。这是我到目前为止的代码。
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);
}
}
当我点击“绘制形状”按钮时,没有任何反应。我一直在寻找几天,但我找不到答案。实际上,它使我对如何做更加困惑。
如何处理?
答案 0 :(得分:0)
不要继续为每个形状创建新面板。
相反,您需要一个带有要绘制的对象的ArrayList的面板。然后,您自定义面板的paintComponent(...)方法,以迭代面板中的所有对象并绘制它们。
因此,您只需将另一个对象添加到ArrayList,然后在面板上调用repaint()。
结帐Custom Painting Approaches。 DrawOnComponent
示例演示了如何从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();
}
像魅力一样工作现在每次按下绘制形状按钮时,每次都会在不同的位置为面板绘制一个形状。我已经放入了单选按钮功能来改变形状颜色和填充,并添加了一个按钮来清除屏幕。
不确定这是否是理想的做法,但对于这个愚蠢的简单小程序,它运作得很好,我已经完成了它的压力。