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