为什么我的JPanel没有被吸引?

时间:2015-10-23 18:01:25

标签: java swing

由于我是新的,我无法发布超过两个链接,但这是来自reddit.com/r/learnprogramming的x-post,仅供完整披露。

我基本上只是粘贴我在这里所说的话。如果您能提供帮助,感谢您的帮助。

我正在写一些图形应用程序。我目前只能将sin(x)图形化,但这不是这个问题的重点。我无法抽到我的主面板。 Here是目前的样子。

我的Window.java类中有一个重写的绘制函数,它绘制了sin(x)函数和轴,但是当我创建一个扩展JPanel()的内部类时,它将不再绘制。

然后我尝试制作一个单独的文件,但它也没有绘制任何内容。

有什么可以阻止它画画? Here are all my files in question.

编辑:有问题的代码:

GraphDraw.java:

//import stuff
Public class GraphDraw extends JPanel {
    SinX sinx = new SinX();
    GraphPanel p = new GraphPanel();

    @Override
    public void paintComponent(Graphics gc) {
        super.paintComponent(gc);

        Graphics2D g = gc;
        p.paintComponent(g);
        sinx.paint(g);
    }
}

在Window.java中,我初始化GraphDraw并将其添加到我的主面板,该主面板位于图片中的按钮下方和x / y最小/最大标签上方。

GraphDraw drawer = new GraphDraw();
/*
  GUI code
*/
mainPanel.add(drawer);

SinX.java

//import stuff

public class SinX extends Component {

    public void paint(Graphics g) {

        g.setColor(Color.red);

        for(double x=-400;x<=400;x=x+0.5) {
            double y = 50 * sin(x*((Math.PI)/180));
            int Y = (int)y;
            int X = (int)x;
            g.drawLine(400+X,300-Y,400+X,300-Y);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先,在其他任何事情之前,执行以下操作:

  1. 将对象从Component更改为JComponent
  2. 永远不要在swing或awt的图形对象上调用paintComponent()或paint(),使用object.repaint(); (由于原因,我不会进入这里,因为它漫长而复杂)
  3. 从那里我会尝试在所有对象上调用setVisible(true);。如果您从教程中获取此代码,请停止并使用其他教程。在开始创建用户界面之前,您需要了解swing和AWT库的工作方式。没有人再使用AWT,因为Swing要好得多。出于原因,请查看以下页面。如果你懒得这么做,那是因为它更优化,更强大。

    What is the difference between Swing and AWT?