Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel不是在JFrame上绘制的_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java JPanel不是在JFrame上绘制的

Java JPanel不是在JFrame上绘制的,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,链接到前面的问题:我想在面板上画画。我有以下课程: 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(); } }

链接到前面的问题:我想在面板上画画。我有以下课程:

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();
    }
}
    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();
          }
      }
      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());
       }
    }
}
frmDashboard.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();
    }
}
    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();
          }
      }
      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());
       }
    }
}
frmplot.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();
    }
}
    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();
          }
      }
      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。不是说电话线。此外,frmplot.java的输出是:

   *WW = 0  HH = 0*

我按照书上的说明去做。我试图在frmCPlot类和CPanel类中添加重绘,但没有用。有什么想法吗?

扩展JFrame从来都不是一个好主意,因为它是一个顶级组件。这只会导致更多的问题。相反,您应该创建一个扩展
JPanel
的类,并将其添加到JFrame中。
JPanel
适用于将事物组合在一起的情况。由于您仍然需要在程序中的某个地方有一个JFrame(否则它将不显示任何内容),因此您必须生成一个变量,并向其中添加
JPanel

试试这样的

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

塔克斯。作品我的GUI在Netbeans中。为什么我要写所有这些东西,而在Netbeans中我只需要将设计JPanel添加到JFrame中?i、 e是什么原因导致netbeans中没有东西,所以我必须编写代码?@EbticBobo我想你的意思是netbeans是你的IDE或编程环境;)。或者您的意思是您在Netbeans中创建了GUI?我不太确定您是在谈论代码完成(通过预测它可以帮助您完成代码行),还是其他什么。但在许多情况下,您使用的是Netbeans还是Eclipse并不重要。