PaintComponent 似乎没有接到电话或显示
PaintComponent don't seem to get call or to show
我的问题很简单:我有这个小程序,但它没有显示我正在尝试制作的红框:
主要
public class Main {
public static void main(String[] args) {
Affichage a = new Affichage();
a.setVisible(true);
}
}
附件:
import java.awt.*;
import javax.swing.*;
public class Affichage extends Frame{
public Affichage(){
setTitle("Exo 1 : Galerie");
setSize(1120,560);
Graphique graph = new Graphique();
this.add(graph);
}
}
图形:
import javax.swing.*;
import java.awt.*;
public class Graphique extends JComponent {
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
Graphics pinceau = g.create();
pinceau.setColor(Color.RED);
pinceau.fillRect(100, 100, 200, 200);
System.out.println("test");
}
}
我敢打赌这是嘲笑,但我找不到它是什么,帮帮我。
PS : 是的,测试也没有打印出来
您正在将 Swing 组件 (javax.swing.JComponent
) 添加到 AWT 框架 (java.awt.Frame
)。没有人会调用 paintComponents()
方法,这就是您得不到任何输出或结果的原因。相反,从 javax.swing.JFrame
扩展,因此您有一个带有 Swing 组件的 Swing 框架。
实际上,不要扩展 JFrame
,因为这是不好的做法。只是举个例子。要绘制,请扩展 JPanel
并覆盖 paintComponent
.
JFrame f = new JFrame();
f.add(new MyPanel());
class MyPanel extends JPanel {
// other stuff
public void paintComponent(Graphics g) {
super.paintComponent(g);
// painting stuff.
}
}
切记不要混用 Swing
和 AWT
成分。
我的问题很简单:我有这个小程序,但它没有显示我正在尝试制作的红框:
主要
public class Main {
public static void main(String[] args) {
Affichage a = new Affichage();
a.setVisible(true);
}
}
附件:
import java.awt.*;
import javax.swing.*;
public class Affichage extends Frame{
public Affichage(){
setTitle("Exo 1 : Galerie");
setSize(1120,560);
Graphique graph = new Graphique();
this.add(graph);
}
}
图形:
import javax.swing.*;
import java.awt.*;
public class Graphique extends JComponent {
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
Graphics pinceau = g.create();
pinceau.setColor(Color.RED);
pinceau.fillRect(100, 100, 200, 200);
System.out.println("test");
}
}
我敢打赌这是嘲笑,但我找不到它是什么,帮帮我。 PS : 是的,测试也没有打印出来
您正在将 Swing 组件 (javax.swing.JComponent
) 添加到 AWT 框架 (java.awt.Frame
)。没有人会调用 paintComponents()
方法,这就是您得不到任何输出或结果的原因。相反,从 javax.swing.JFrame
扩展,因此您有一个带有 Swing 组件的 Swing 框架。
实际上,不要扩展 JFrame
,因为这是不好的做法。只是举个例子。要绘制,请扩展 JPanel
并覆盖 paintComponent
.
JFrame f = new JFrame();
f.add(new MyPanel());
class MyPanel extends JPanel {
// other stuff
public void paintComponent(Graphics g) {
super.paintComponent(g);
// painting stuff.
}
}
切记不要混用 Swing
和 AWT
成分。