图形未显示(JAVA,GRAPHICS)
Graphics not displaying (JAVA, GRAPHICS)
我正在建造一条道路:一个白色圆圈中的红色十字和 3 个绿色方块。
我已经构建了项目,但它没有显示出来。我已经尝试了很多东西,但我无法弄清楚我错过了什么......图形 g 没有出现。
我尝试添加 getContentPane() 和 super.paint(g)。我也许会添加:.add(g) 但我不确定在哪里...
非常感谢您的帮助(和解释,以便我理解并避免下次错误)。
public class Robot0 extends JFrame implements ActionListener{
public Robot0(String nom, int larg, int haut){
JFrame fen = new JFrame(); // creer une fenetre, nommee fen, de la classe JFrame
fen.setTitle(nom); // definir un titre de fenetre
fen.setSize(larg, haut); // definir la taille de fenetre
fen.setLocationRelativeTo(null); // creer fen au centre de l’ecran
fen.setResizable(false); //prevent redimensionning
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
fen.setVisible(true); // rendre visible la fenetre fen
}
Timer tm = new Timer(10,this);
private int posX = 0; // (posX,posY) une position dans le panneau `a cr´eer
private int posY = 0;
private int velX = 1;
public int getPosX() {
return posX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
public void paint(Graphics g){
super.paint(g);
//Draw the pathway in a 800x600 pixels panel made up of 5 segments (using draw.Polyline)
int xt[] = {50, 50, 250, 250, 350, 350};
int yt[] = {50, 150, 150, 50, 50, 150};
g.drawPolyline(xt, yt, 6);
//On the pathway, draw 3 squares (the 3 rooms)
//J'ai place les carres tel que son centre soit sur la ligne de trajet
g.setColor(Color.GREEN);
g.drawRect(35, 135, 30,30);
g.drawRect(235, 35, 30,30);
g.drawRect(335, 135, 30,30);
//J'ai place le robot tel que son centre soit sur la ligne de trajet
g.setColor(Color.WHITE);
g.fillOval(40+posX,40+posY,20,20);
g.setColor(Color.RED);
g.drawLine(45+posX,50+posY,55+posX,50+posY);
g.drawLine(50+posX,45+posY,50+posX,55+posY);
tm.start();
}
//ACTIONS TO BUILD //
// Build the Panel
public static void main(String[] args){
Robot0 r = new Robot0("Robot0", 800, 600);
r.getContentPane().setBackground(Color.BLUE);
}
}
Robot0
扩展了 JFrame
,所以它本身就是一个 JFrame
。因此,您不需要,而且可能不应该在构造函数中创建一个新的 JFrame
或 Robot0
.
替换
public Robot0(String nom, int larg, int haut){
JFrame fen = new JFrame(); // creer une fenetre, nommee fen, de la classe JFrame
fen.setTitle(nom); // definir un titre de fenetre
fen.setSize(larg, haut); // definir la taille de fenetre
fen.setLocationRelativeTo(null); // creer fen au centre de l’ecran
fen.setResizable(false); //prevent redimensionning
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
fen.setVisible(true); // rendre visible la fenetre fen
}
和
public Robot0(String nom, int larg, int haut){
setTitle(nom); // definir un titre de fenetre
setSize(larg, haut); // definir la taille de fenetre
setLocationRelativeTo(null); // creer fen au centre de l’ecran
setResizable(false); //prevent redimensionning
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
setVisible(true); // rendre visible la fenetre fen
}
我正在建造一条道路:一个白色圆圈中的红色十字和 3 个绿色方块。
我已经构建了项目,但它没有显示出来。我已经尝试了很多东西,但我无法弄清楚我错过了什么......图形 g 没有出现。
我尝试添加 getContentPane() 和 super.paint(g)。我也许会添加:.add(g) 但我不确定在哪里...
非常感谢您的帮助(和解释,以便我理解并避免下次错误)。
public class Robot0 extends JFrame implements ActionListener{
public Robot0(String nom, int larg, int haut){
JFrame fen = new JFrame(); // creer une fenetre, nommee fen, de la classe JFrame
fen.setTitle(nom); // definir un titre de fenetre
fen.setSize(larg, haut); // definir la taille de fenetre
fen.setLocationRelativeTo(null); // creer fen au centre de l’ecran
fen.setResizable(false); //prevent redimensionning
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
fen.setVisible(true); // rendre visible la fenetre fen
}
Timer tm = new Timer(10,this);
private int posX = 0; // (posX,posY) une position dans le panneau `a cr´eer
private int posY = 0;
private int velX = 1;
public int getPosX() {
return posX;
}
public void setPosX(int posX) {
this.posX = posX;
}
public int getPosY() {
return posY;
}
public void setPosY(int posY) {
this.posY = posY;
}
public void paint(Graphics g){
super.paint(g);
//Draw the pathway in a 800x600 pixels panel made up of 5 segments (using draw.Polyline)
int xt[] = {50, 50, 250, 250, 350, 350};
int yt[] = {50, 150, 150, 50, 50, 150};
g.drawPolyline(xt, yt, 6);
//On the pathway, draw 3 squares (the 3 rooms)
//J'ai place les carres tel que son centre soit sur la ligne de trajet
g.setColor(Color.GREEN);
g.drawRect(35, 135, 30,30);
g.drawRect(235, 35, 30,30);
g.drawRect(335, 135, 30,30);
//J'ai place le robot tel que son centre soit sur la ligne de trajet
g.setColor(Color.WHITE);
g.fillOval(40+posX,40+posY,20,20);
g.setColor(Color.RED);
g.drawLine(45+posX,50+posY,55+posX,50+posY);
g.drawLine(50+posX,45+posY,50+posX,55+posY);
tm.start();
}
//ACTIONS TO BUILD //
// Build the Panel
public static void main(String[] args){
Robot0 r = new Robot0("Robot0", 800, 600);
r.getContentPane().setBackground(Color.BLUE);
}
}
Robot0
扩展了 JFrame
,所以它本身就是一个 JFrame
。因此,您不需要,而且可能不应该在构造函数中创建一个新的 JFrame
或 Robot0
.
替换
public Robot0(String nom, int larg, int haut){
JFrame fen = new JFrame(); // creer une fenetre, nommee fen, de la classe JFrame
fen.setTitle(nom); // definir un titre de fenetre
fen.setSize(larg, haut); // definir la taille de fenetre
fen.setLocationRelativeTo(null); // creer fen au centre de l’ecran
fen.setResizable(false); //prevent redimensionning
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
fen.setVisible(true); // rendre visible la fenetre fen
}
和
public Robot0(String nom, int larg, int haut){
setTitle(nom); // definir un titre de fenetre
setSize(larg, haut); // definir la taille de fenetre
setLocationRelativeTo(null); // creer fen au centre de l’ecran
setResizable(false); //prevent redimensionning
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Femer la fenetre (termine l’execution) quand on clique sur la croix rouge de fen
setVisible(true); // rendre visible la fenetre fen
}