Java 图形不会出现

Java 图形不会出现,java,Java,无论我做什么,我都不能在屏幕上显示矩形/直线/椭圆形。我检查了其他绘制图形的源代码,但当我执行这些代码时,我没有在窗口上显示任何图形。下面是教科书中的示例 import java.awt.*; import javax.swing.*; class PlotGraph { public static void main (String [] args) { JFrame win; Container contentPane; Graphics g; wi

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

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); 

   }

}

哎哟。那你应该换课本了。首先,对Swing组件的所有访问都必须在中完成


其次,您不应该获取组件的图形并在其上绘制。相反,您应该扩展JComponent或JPanel,重写其
paintComponent(Graphics)
方法,并使用作为参数传递的图形对象(实际上是
Graphics2D
实例)进行绘制。那你应该换课本了。首先,对Swing组件的所有访问都必须在中完成


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

这不是图形在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);
    }
}

我强烈建议您在线查看。

这不是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);
    }
}

我强烈建议您在线查看。

出于好奇,这是什么书?Thomas WU的《Java面向对象编程》,第5版。第257页我也看到了这个关于图形的视频,但我也遇到了同样的问题,图形没有出现,但在视频中,它为解释它的人做了解释——出于好奇,这是什么书?Thomas WU的《面向对象Java》,第五版。第257页我也看到了这个关于图形的视频,但我也遇到了同样的问题,图形没有出现,但在视频中,它为解释它的人提供了-+1链接到Swing教程-1用于在帧可见后添加组件,并且不执行EDT.WChargin上的代码-我有一个问题。它可以工作,但paintComponent方法是如何被调用的?就像什么东西叫它。。我所看到的是,我们创建了MyComponent类的一个新对象,它有一个void方法。如果我有不止一种方法怎么办?绘画是由重绘经理决定/安排的。Rock out可获得更详细的描述+1可链接到Swing教程-1用于在帧可见后添加组件,并且不执行EDT.WChargin上的代码-我有一个问题。它可以工作,但paintComponent方法是如何被调用的?就像什么东西叫它。。我所看到的是,我们创建了MyComponent类的一个新对象,它有一个void方法。如果我有不止一种方法怎么办?绘画是由重绘经理决定/安排的。摇出一个更详细的描述