1

我有一个MyFrame扩展类JFrame。我使用 NET BEANS 中的设计选项向此框架添加了组件(控件,即按钮)。我有一个MyCanvas类扩展JPanel了一个重写的paintComponent()方法。我正在尝试将此组件添加到MyFrame类中。但是当我添加它并使其可见时,canvas( JPanel) 不会在JFrame. (首先我试图添加Mycanvas扩展的类Canvas。但后来我在这里阅读了一个线程来尝试将其更改为JPanel。我也没有工作。对于画布我显然不使用绘画paintcomponent())我的代码在下面

MyCanvas 类

 public class MyCanvas extends javax.swing.JPanel{

 MyCanvas()
 {
      super();
 }

 @Override
 public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D graphics2D=(Graphics2D)g;

    graphics2D.drawRect(10, 10, 10, 10);

    graphics2D.drawOval(0, 0, 100, 100);
}

}

我的框架

public class Myframe extends javax.swing.JFrame {

public Myframe() {

    initComponents();
  @SuppressWarnings("unchecked")
  +generatedcode by the designer

 private void RectangleActionPerformed(java.awt.event.ActionEvent evt) {
}

private void SquareActionPerformed(java.awt.event.ActionEvent evt) {
}

private void CircleActionPerformed(java.awt.event.ActionEvent evt) {
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Myframe().setVisible(true);
        }
    });
}
public void run() {
        new Myframe().setVisible(true);
    }
// Variables declaration - do not modify
private javax.swing.JButton Circle;
private javax.swing.JButton Rectangle;
private javax.swing.JButton Square;
// End of variables declaration
}

我的主程序

public static void main(String[] args) {

    MyCanvas c = new MyCanvas();
    Myframe f= new Myframe();//Works if used JFrame instead of MyFrame

    f.add(c);
    f.setVisible(true);
}

基本上,我想创建一个 GUI,其中我想要可以触发事件并更改在画布上绘制的内容的按钮。我用一个空的jframe试了一下。将画布/面板添加到 JFrame 。有效。我也改变了我的面板/画布并刷新了框架。那也很好用。但我不能这样做。

4

3 回答 3

2

那是您将创建JFrame与 IDE 混合并创建JPanel自己,请记住 IDE 将所有组件添加到JFrame其中initComponents()理想的位置是您想要Canvas添加的位置。

要么自己创建JFrameand JPanel(不使用 Netbeans GUI Builder)

或者

您可以使用Netbeans的调色板管理器Component将您添加到调色板中,然后您可以像使用任何其他类一样在 GUI 构建器中使用它:

(只需将Canvas类从项目树拖到JFrameGUI 设计器中)

确保您的自定义Canvas功能:

  • 覆盖getPrefferedSize(..)并返回适合的尺寸

参考:

于 2012-10-26T18:23:02.680 回答
0

尝试将其更改为:

public static void main(String[] args) {

    MyCanvas c = new MyCanvas();
    Myframe f= new Myframe();//Works if used JFrame instead of MyFrame

    f.add(c);
    c.setVisible(true);
    f.setVisible(true);
}

另外,您MyFrame班级中的代码:

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Myframe().setVisible(true);
        }
    });
}

MyFrame除非您正在运行而不是您的程序 main,否则不会执行。

还要检查您的构造函数中是否有super()调用。MyFrame

于 2012-10-26T18:05:08.480 回答
0
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.setColor(Color.BLACK);

    Graphics2D graphics2D=(Graphics2D)g;

    graphics2D.drawRect(10, 10, 10, 10);

    graphics2D.drawOval(0, 0, 100, 100);
}
于 2012-10-26T18:11:46.980 回答