package Graph;

import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JFrame;
import javax.swing.JPanel;


下面是我的班级,涵盖所有其他班级,并扩展了JFrame,它是通过在Netbeans中选择“新建> Java框架”选项创建的。我在名为Graph的程序包中创建了此文件,其文件名为GraphFrame.Java。

public class GraphFrame extends javax.swing.JFrame {


public GraphFrame() {

}


以下几行来自我的JFrame自动创建代码。

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">


下面的这些行是我的主要方法

public static void main(String args[]) {


    /* Create and display the form */
    //java.awt.EventQueue.invokeLater(new Runnable() {
        //public void run() {
            GraphFrame Frame=new GraphFrame();
            Frame.setVisible(true);
            Frame.setTitle("Functional Dependency");
            Frame.setSize(500, 500);

        //}
   // });
}


这些行是我在GraphFrame类的内部创建的DrawGraph类。除此之外,它还扩展了我的JPanel,我是通过从Swing容器中拖动JPanel图标来制作的(很抱歉,如果这是添加JPanel的错误方法)

class DrawGraph extends JPanel{
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.drawLine(10, 100, 380, 100);
    g.drawLine(200, 30, 200, 190);

    g.drawLine(380, 100, 370, 90);
    g.drawLine(380, 100, 370, 110);
    g.drawLine(200, 30, 190, 40);
    g.drawLine(200, 30, 210, 40);

    g.drawString("X", 360, 80);
    g.drawString("Y", 220, 40);




    }

}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}


我的问题是,我编码的图形线没有出现。我用谷歌搜索,StackOverflowed,浏览了我的实验练习,但似乎找不到解决方案。是的,这可能需要更多阅读,但是老实说,我不太明白是怎么回事。

最佳答案

问题是您永远不会将JPanel添加到创建的框架中。

这应该做您想要的。

public class GraphFrame extends JFrame {

private DrawGraph graph;

public GraphFrame(){
    super();
    graph = new DrawGraph();
    this.add(graph);
}
class DrawGraph extends JPanel{
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(10, 100, 380, 100);
        g.drawLine(200, 30, 200, 190);

        g.drawLine(380, 100, 370, 90);
        g.drawLine(380, 100, 370, 110);
        g.drawLine(200, 30, 190, 40);
        g.drawLine(200, 30, 210, 40);

        g.drawString("X", 360, 80);
        g.drawString("Y", 220, 40);
        }
    }
}


注意,可以调用this.add(graph),因为GraphFrame扩展了JFrame。 .add()方法是JFrame类的一部分,因此可以从GraphFrame调用

您还应该考虑为DrawGraph类创建一个新文件,因为如果您想为GraphFrame or DrawGraph添加更多功能,它可能会变得凌乱。

07-24 21:01