Java图形没有出现

Java图形没有出现,java,swing,class,Java,Swing,Class,根据我以前的经验,我知道扩展JFrame和JPanel是不好的。所以我决定放弃这个想法,学习如何编写框架及其组件(顺便说一句,我还在学习)。但是,即使我已经按了按钮,我似乎无法显示我的图表,我现在已经不知所措了 下面是我的第一堂课,它已经建立并声明了所有的小组(如果术语不正确,请原谅我) 下面这几行是我的另一门课“DrawGraph”。我不太擅长编码,但我肯定我没有正确调用该类,只是不知道如何调用 class DrawGraph { DrawGraph drawgrap

根据我以前的经验,我知道扩展JFrame和JPanel是不好的。所以我决定放弃这个想法,学习如何编写框架及其组件(顺便说一句,我还在学习)。但是,即使我已经按了按钮,我似乎无法显示我的图表,我现在已经不知所措了

下面是我的第一堂课,它已经建立并声明了所有的小组(如果术语不正确,请原谅我)

下面这几行是我的另一门课“DrawGraph”。我不太擅长编码,但我肯定我没有正确调用该类,只是不知道如何调用

 class DrawGraph
{
            DrawGraph drawgraph = new DrawGraph();
            static boolean lukis = true;   





             int oldY = 0;
             double degToRad (int deg){
            return ((2*Math.PI)/360.0) * deg;
            }

            int scale (int i, int width){
                return (int) ((i/(double)width)*720.0);}


            public void paintGraph(Graphics g){



                g.drawLine(0, 100, 400, 100);//X-axis
                g.drawLine(200, 0, 200, 200);//Y-axis
                g.drawLine(400, 100, 390, 90);//arrow pointing rightwards
                g.drawLine(400, 100, 390, 110);//arrow pointing rightwards
                g.drawLine(200, 0, 190, 10);//arrow pointing upwards
                g.drawLine(200, 0, 210, 10);//arrow pointing upwards

                g.drawString("X", 400, 80);//draw 'X' label
                g.drawString("Y", 220, 10);//draw 'Y' label

                g.drawString("\u03C0/2", 240, 120);//draw ' 1/2 Pi' label
                g.drawString("\u03C0", 290, 120);//draw 'Pi' label
                g.drawString("2\u03C0", 400, 120);//draw ' 2 Pi' label
                g.drawString("3\u03C0/2", 340, 120);//draw ' 3/2 Pi' label


                g.drawString("-\u03C0/2", 140, 120);//draw 'negative 1/2 Pi' label
                g.drawString("-\u03C0", 87, 120);//draw 'negative Pi' label
                g.drawString("-2\u03C0", 0, 120);//draw 'negative 2 Pi' label
                g.drawString("-3\u03C0/2", 30, 120);//draw ' 3/2 Pi' label



                g.drawString("0", 205, 110);//draw '0' label
                g.drawString("0.77", 175, 50);//draw '0.77' label for half Pi
                g.drawString("1", 175, 10);//draw '1' label for a Pi
                g.drawString("-0.77", 170, 150);//draw '0.77' label for half Pi
                g.drawString("-1", 185, 200);//draw '1' label for a Pi


                int width = 400;
                int height = 200;

                for (int i=0; i<width; i++){

                    int y = (int) Math.round((-Math.sin(degToRad(scale(i,width)))+1)*height/2.0);
                    if (lukis && i>0){

                        g.drawLine(i-1, oldY, i, y);
                           } 


                    else {
                        g.drawLine(i, y, i, y);

                          }


                oldY = y;
                }
  }
}
类绘图
{
DrawGraph DrawGraph=新的DrawGraph();
静态布尔值lukis=true;
int oldY=0;
双除雾器(内部度){
返回((2*Math.PI)/360.0)*度;
}
整数比例(整数i,整数宽度){
返回值(int)((i/(双)宽度)*720.0);}
公共空间画图(图g){
g、 抽绳(0,100,400,100);//X轴
g、 抽绳(200,0,200,200);//Y轴
g、 抽绳(40010039090);//向右箭头
g、 抽绳(400100390110);//向右箭头
g、 抽绳(200,0,190,10);//指向上方的箭头
g、 抽绳(200,0,210,10);//指向上方的箭头
g、 抽绳(“X”,400,80);//画“X”标签
g、 抽绳(“Y”,220,10);//画“Y”标签
g、 drawString(“\u03C0/2”,240,120);//绘制“1/2 Pi”标签
g、 drawString(“\u03C0”,290,120);//绘制'Pi'标签
g、 drawString(“2\u03C0”,400120);//绘制'2pi'标签
g、 抽绳(“3\u03C0/2”,340,120);//绘制“3/2 Pi”标签
g、 drawString(“-\u03C0/2”,140,120);//绘制“负1/2π”标签
g、 drawString(“-\u03C0”,87120);//绘制“负Pi”标签
g、 drawString(“-2\u03C0”,0,120);//绘制“负2π”标签
g、 抽绳(“-3\u03C0/2”,30,120);//绘制“3/2 Pi”标签
g、 抽绳(“0”,205,110);//绘制“0”标签
g、 抽绳(“0.77”,175,50);//为半圆周率绘制“0.77”标签
g、 drawString(“1”,175,10);//为Pi绘制“1”标签
g、 抽绳(“-0.77”,170150);//为半圆周率绘制“0.77”标签
g、 drawString(“-1”,185200);//为Pi绘制“1”标签
整数宽度=400;
整数高度=200;
对于(int i=0;i0){
g、 抽绳(i-1,旧,i,y);
} 
否则{
g、 抽绳(i,y,i,y);
}
oldY=y;
}
}
}
编辑:我想我已经清理了足够多的代码缩进,如果我错了,请纠正我。是的,我犯了一些不专业的错误,所以请原谅我

我了解到扩展JFrame和JPanel是不好的

但是如果您需要在GUI中绘图,通常需要扩展JPanel,这正是您在这里应该做的。例如,使用图形对象绘制的代码应该位于JPanel的
受保护的void paintComponent(Graphics g)
方法的内部。因此,您的DrawGraph类应该扩展JPanel,它应该覆盖paintComponent,并在顶部添加一个
@override
注释,并且应该调用super方法:

public class DrawGraph extends JPanel {
    // .... variables, constructor, methods here...

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // your painting code here
    }
关于,

guiframe.getContentPane().add(DrawGraph.paintComponent());
我不知道你想在这里做什么,但你知道,这是错误的,删除那一行,以后甚至不要做类似的事情。看起来您几乎是在尝试直接调用组件的paintComponent方法,这是您几乎永远不想做的事情

关于:

下面这几行是我的另一门课“DrawGraph”。我不太擅长编码,但我确定我没有正确调用该类,只是不知道如何

但这正是教程的目的。如果您尚未阅读,请立即阅读:

  • :Swing图形的入门教程
  • :Swing图形高级教程

又是我,java图表的标题不是很好:“又是我…”只会让你想在没有进一步阅读的情况下否决它(不是我)。是的,这是我的责任:(但感谢其他人的反对票,我会尽量变得更专业。第一类代码已经重新格式化。我真的很抱歉给您带来了负担,我将以此作为一个教训,更好地缩进。关于这个问题,我按照您的指示,给这个类打了电话,我成功了。我已经编码了这一行/*guiframe.add(new DrawGraph());/就在/guiframe.pack();/之前,它给了我图形,但不知怎么的,按钮不见了。编辑:愚蠢的错误,我把它放在了/guiframe.pack()下面;*/按钮又出现了。谢谢@hovercraft另一边的建议:代码缩进和样式不是可选的或自由形式的,而是需要符合标准。缩进和大括号的位置到处都是,使代码很难阅读和理解。如果您不这样做,我们将不胜感激在将代码发布到这里之前,请努力清理您的代码。试图提取问题的要点并理解您的代码是非常困难的,因此您不想让这对我们来说比必要的更困难。正如您强烈建议的,我已经清理了代码,我不得不说,我从您那里得到了一个建议,您在Jav方面拥有丰富的经验a(基于你以前关于java的回答)真的激励了我。关于你的回答,是的,所有的错误,所有的问题在我从中学习后都会消失。但是有一个问题是调用类。我会尽快更新。
guiframe.getContentPane().add(DrawGraph.paintComponent());