图形不会出现

时间:2013-03-12 23:17:32

标签: java

无论我做什么,我都无法在屏幕上显示矩形/线条/椭圆形。我检查了他们绘制图形的其他来源,但是当我甚至执行这些代码时,我没有在窗口上显示任何图形。以下是教科书中的示例。

import java.awt.*;
import javax.swing.*;

class PlotGraph
{
   public static void main (String [] args) {
    JFrame win;
    Container contentPane;
    Graphics g;

    win = new JFrame("testing");
    win.setSize(300,200);
    win.setLocation(100,100);
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    win.setVisible(true);

    contentPane = win.getContentPane();
    g = contentPane.getGraphics();

    g.drawRect(10, 30, 50, 50); 

   }

}

2 个答案:

答案 0 :(得分:3)

哎哟。那你应该改变你的教科书。首先,所有对Swing组件的访问必须在event dispatch thread

中完成

其次,你不应该获得组件的图形并在其上绘画。相反,您应该扩展JComponent或JPanel,覆盖其paintComponent(Graphics)方法,并使用作为参数传递的Graphics对象进行绘制(实际上它是Graphics2D实例)。

答案 1 :(得分:1)

这不是Swing中图形的工作原理。

您需要在框架中添加组件,而不仅仅是绘制它。你永远不想直接在画框上画画。它没有做任何事情的原因是因为你的绘图代码被覆盖了。

如果您希望组件具有自定义绘图代码,请创建JComponent的子类并覆盖paintComponent(Graphics)方法。 应如何执行此操作的示例如下:

import java.awt.*;
import javax.swing.*;

class PlotGraph {
    public static void main(String[] args) {
        JFrame win;

        win = new JFrame("testing");
        win.setSize(300, 200);
        win.setLocation(100, 100);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setVisible(true);
        win.setContentPane(new MyComponent());
    }

}

class MyComponent extends JComponent {

    @Override
    public void paintComponent(Graphics g) {
        g.drawRect(10, 30, 50, 50);
    }
}

高度鼓励您在线查看Java GUI tutorial