油漆组件();不工作/被调用
paintComponent(); is not working/ being called
这是我的代码。我对编码有点陌生,所以请多加练习。
public class main extends JPanel{
public static Window f = new Window();
public static int Width = 600;
public static int Hight = 400;
public static void main(String args[]){
f.setSize(Width, Hight);
f.setVisible(true);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("FightForYourLife");
f.setLocationRelativeTo(null);
}
public void main(){
JPanel panel = this;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(100, 100, 50, 30);
System.out.println("IT IS PAINTING");
}
}
一堆问题,但第 1 个:
- 您永远不会将您的主要对象添加到您的顶级 Window、GUI 等,因为它永远不会添加到 GUI,所以它永远不会显示或呈现,因此
paintComponent
永远不会被调用。在您的 public static void main 方法中创建一个新的 Main 对象并将其添加到您的 Window(为什么 Window 而不是 JFrame?)。
其他问题:
- 您的 class 作为 "pseudo" 构造函数,
public void main(){
。请记住,构造函数没有 return 类型,不是 void,不是任何东西。所以应该是public main() {
.
- 你的伪构造函数没有任何用处。
JPanel panel = this;
???
- 您需要遵循 Java 命名规则:class 名称以大写字母开头,字段和方法以小写字母开头。所以
public class main {
应该是 public class Main {
- 同样,为什么 Window 而不是 JFrame?
例如:
import java.awt.*;
import javax.swing.*;
// rename main to Main
public class Main extends JPanel{
public static int WIDTH = 600;
public static int HEIGHT = 400;
public static void main(String args[]){
Main main = new Main(); // *** create your main object ***
JFrame f = new JFrame("FightForYourLife");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(main); // *** add your main object to the top-level window
f.pack();
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public Main(){
// JPanel panel = this; // this is not helpful, delete it
}
@Override // let the JPanel size itself.
public Dimension getPreferredSize() {
return new Dimension(WIDTH, HEIGHT);
}
@Override // paintComponent should be protected, not public
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(100, 100, 50, 30);
System.out.println("IT IS PAINTING");
}
}
这是我的代码。我对编码有点陌生,所以请多加练习。
public class main extends JPanel{
public static Window f = new Window();
public static int Width = 600;
public static int Hight = 400;
public static void main(String args[]){
f.setSize(Width, Hight);
f.setVisible(true);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("FightForYourLife");
f.setLocationRelativeTo(null);
}
public void main(){
JPanel panel = this;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(100, 100, 50, 30);
System.out.println("IT IS PAINTING");
}
}
一堆问题,但第 1 个:
- 您永远不会将您的主要对象添加到您的顶级 Window、GUI 等,因为它永远不会添加到 GUI,所以它永远不会显示或呈现,因此
paintComponent
永远不会被调用。在您的 public static void main 方法中创建一个新的 Main 对象并将其添加到您的 Window(为什么 Window 而不是 JFrame?)。
其他问题:
- 您的 class 作为 "pseudo" 构造函数,
public void main(){
。请记住,构造函数没有 return 类型,不是 void,不是任何东西。所以应该是public main() {
. - 你的伪构造函数没有任何用处。
JPanel panel = this;
??? - 您需要遵循 Java 命名规则:class 名称以大写字母开头,字段和方法以小写字母开头。所以
public class main {
应该是public class Main {
- 同样,为什么 Window 而不是 JFrame?
例如:
import java.awt.*;
import javax.swing.*;
// rename main to Main
public class Main extends JPanel{
public static int WIDTH = 600;
public static int HEIGHT = 400;
public static void main(String args[]){
Main main = new Main(); // *** create your main object ***
JFrame f = new JFrame("FightForYourLife");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(main); // *** add your main object to the top-level window
f.pack();
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public Main(){
// JPanel panel = this; // this is not helpful, delete it
}
@Override // let the JPanel size itself.
public Dimension getPreferredSize() {
return new Dimension(WIDTH, HEIGHT);
}
@Override // paintComponent should be protected, not public
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(100, 100, 50, 30);
System.out.println("IT IS PAINTING");
}
}