【问题标题】:Cant draw a shape to a specific panel in a NetBeans GUI无法在 NetBeans GUI 中将形状绘制到特定面板
【发布时间】:2017-12-06 21:25:10
【问题描述】:

我正在尝试制作一个简单的应用程序来在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);
}

}

当我单击“绘制形状”按钮时,没有任何反应。我已经搜索了几天,但没有找到答案。实际上,这让我更加困惑该怎么做。

如何处理?

【问题讨论】:

    标签: java swing netbeans jpanel


    【解决方案1】:

    不要一直为每个形状创建新面板。

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

    所以你的按钮只会向 ArrayList 添加另一个对象,然后在面板上调用 repaint()。

    查看Custom Painting ApproachesDrawOnComponent 示例展示了如何从 ArrayList 绘制 Rectangle 对象以帮助您入门。

    【讨论】:

    • 感谢您抽出宝贵的时间回复,但老实说,我不知道您在做什么。你如何“重绘”单选按钮?还是按钮?我需要这三个面板,因为显然您不能只将 GUI 控件放在空白的 jFrame 上。因此,如果我只有一个面板,那么 GUI 控件会发生什么……当我添加形状时它们会被涂上???
    • @CryHavoc_Mike,我不知道你为什么觉得我的回答令人困惑。我给了你一个完整的工作代码的链接,你可以下载和测试。我猜你没有花时间关注链接。如果我可以花时间回复,您至少可以花时间阅读链接。你可以把马牵到水边,但你不能强迫它喝水。
    • 我确实看过你的链接。我一直在浏览代码,但无法纠正如何实现它来做我需要做的事情。我已经尝试使用自定义代码编辑器为我的 GUI 中的控件实现您的语句版本,但我不断收到错误。在我读过的所有关于这个的东西中,我一直看到像你这样的说法。 "JFrame frame = new JFrame("Draw On Component");"但是当我尝试它时,它会抛出一个错误。我已经有了一个 jFrame,为什么还要实例化另一个?
    • 但是当我尝试做你写的那样的事情时,“frame.getContentPane().add(drawingArea);”使用我的 jFrame 的名称会出现大量错误?
    • 我给了你一个例子,展示了如何进行自定义绘画。有一个DrawingArea 展示了如何遍历 List 中的对象以绘制每个 objdct。有一个addRectangle(...) 方法显示如何将新对象添加到列表中。向框架添加组件是基本的 Swing。如果您不知道该怎么做,我不确定您为什么要尝试进行自定义绘画。我不知道你为什么会出错。我不能教你基本的 Java。
    【解决方案2】:

    我发现使用 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();
    
    }
    

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

    不确定这是否是理想的方法,但对于这个愚蠢的简单小程序来说,它运行得很好,我已经没有压力了。

    【讨论】:

      猜你喜欢
      • 2014-04-02
      • 2016-03-23
      • 1970-01-01
      • 2022-11-22
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多