2012-10-26 51 views
1

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

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); 
} 

} 

MyFrame

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。有效。此外,我改变了我的面板/帆布,并重新框架。这也很好。但我无法这样做。

回答

2

的是,你是混合创建JFrame与IDE和创建JPanel自己,记住IDE会将所有的组件在initComponents()JFrame其理想,你会希望有你的加入Canvas

可以创建自己的JFrameJPanel(不使用NetBeans GUI Builder中的)

你可以使用NetBeans的面板管理器添加您Component的调色板,那么你就可以使用GUI Builder中,就像任何其他类:

  • ​​

(只需从项目树上拖动Canvas类的JFrame在GUI设计师)

要确保您的自定义Canvas功能:

  • 覆盖getPrefferedSize(..)并返回其尺寸配合

参考:

+0

仍然不工作 –

+0

@MuhammadTaha看到更新请 –

+0

好吧,现在我已经根据你的指示编辑,我的画布显示自己。但是,由于initcomponents方法已被删除,它不显示我添加的按钮。我想按钮和画布应该显示自己。这是预期的结果。任何方式根据我的要求做到这一点? –

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,而不是你的程序主要的。

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

+0

没有doesn.t工作。我也试过很多时间 'f.invalidate();'' f.validate();'' f.repaint() ;' –

+0

我如何运行MyFrame的主代码(正如你所说的)? 在MyFrame中添加了super(),但它仍然不起作用。 –

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); 
}