java - JPanel 未在 JFrame 上绘制

标签 java swing jframe jpanel

链接到上一个问题:我想在面板上绘图。我有以下类(class):

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 类中添加重绘,但没有用。有什么想法吗?

最佳答案

扩展 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);

关于java - JPanel 未在 JFrame 上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934955/

相关文章:

java - 用 Java 计算一系列?

java - 如何捕获 Swing GUI 元素?

java - 为什么我的循环 GUI 计时器没有显示?

java - 如何检查 JComboBox 是否为空?

java - 将 linux 命令行输出发送到另一个 screen

java - 将文本文件转换为全部大写字母

java - 搜索用另一个面板替换面板的命令

java - 在 jframe 运行时添加删除面板

ubuntu - 在 Ubuntu 中制作 JFrame 全屏

java - 在 Java 中如何检查文件中的空行然后忽略它们?