2016-03-11 35 views
1

与前面的问题关联:我想绘制面板。我有以下类:JPanel不在JFrame上绘制

GMain.java

public class GMain{ 
    static frmDashboard fDB; 

    public static void main(String[] args) { 

    fDB = new frmDashboard(); 
    fDB.setTitle("Graphics Mate"); 
    fDB.setVisible(true); 
    fDB.pack(); 
    } 
} 

frmDashboard.java

public class frmDashboard extends javax.swing.JFrame { 
     public frmDashboard() { 
      initComponents(); 
      Clear(); 
     } 

     private void btnPlotActionPerformed(java.awt.event.ActionEvent evt) { 
      frmCPlot fCP = new frmCPlot(); 
      fCP.setVisible(true); 
      fCP.pack(); 
      } 
     } 

frmCPlot.java

 public class frmCPlot extends javax.swing.JFrame { 
      int W, H; 
      int N; 

      public frmCPlot() { 
       initComponents(); 
       CPanel cp = new CPanel(); 
       this.getContentPane().add(cp); 
      System.out.println("WW = " + cp.getWidth() + 
          " HH = " + cp.getHeight()); 
    } 

    class CPanel extends JPanel{ 
     int i, j; 

     public CPanel(){ 
      setPreferredSize(new Dimension(400, 400)); 
      setBackground(Color.WHITE); 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
       super.paintComponent(g); 
       g.drawLine(0, 0, this.getWidth(), this.getHeight()); 
     } 
    } 
} 

显示frmCPlot,但不显示CPanel。不是在谈论这条线。多,从frmCPlot.java输出为:

*WW = 0 HH = 0* 

我后面的书的说明。我尝试在CPanel类的frmCPlot类中添加重绘,但没有用。有什么想法?

回答

2

扩展JFrame从不是一个好主意,因为它是一个顶级组件。这只会导致更多的问题。相反,您应该创建一个扩展JPanel的类并将其添加到JFrame中。 A JPanel适合当你想把事情分组在一起时。由于你的程序中还有一个JFrame(否则它将不显示任何内容),所以你必须创建一个变量,并将JPanel添加到它。

尝试这样的事情

JFrame frame = new JFrame("My Frame"); 
frame.setSize(500, 500); 
frame.getContentPane().add(new JPanel MyPanel); 
frame.setVisible(true); 
+0

感谢名单。作品。我的GUI是在Netbeans中。为什么我必须编写所有这些东西,在netbeans中只需要添加设计JPanel到JFrame?也就是说netbeans中没有东西的原因是什么,所以我必须编写代码? –

+0

@EbticBobo我认为你的意思是Netbeans是你的IDE或编程环境;)。或者你的意思是你在Netbeans中创建了你的GUI?而且我不太确定你是否在讨论代码完成(它可以帮助你通过预测来完成代码行),或者其他的东西。但是,在很多情况下,无论您使用Netbeans还是Eclipse,都是无关紧要的。 – Eames