Canvas / JPanel没有显示在JFrame上?

时间:2012-10-26 17:58:32

标签: java swing jframe jpanel

我有一个MyFrame类扩展JFrame。我使用NET BEANS中的设计选项向此框架添加了组件(控件,即按钮)。我有一个MyCanvas类,使用重写的JPanel方法扩展paintComponent()。我正在尝试将此组件添加到MyFrame类。但是当我添加它并使其可见时,画布(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);
}

}

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。有效。我还改变了我的Panel / Canvas并重新刷新了框架。这也很好。但我不能这样做。

3 个答案:

答案 0 :(得分:2)

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

自己创建JFrameJPanel(不使用Netbeans GUI Builder)

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

(只需将Canvas类从项目树拖到GUI设计器中的JFrame

确保您的自定义Canvas功能:

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

<强>参考:

答案 1 :(得分: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而不是程序主页,否则不会执行

同时检查super()构造函数中是否有MyFrame来电。

答案 2 :(得分: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);
}