Java 杰帕内尔元';t显示
我有一个类,它应该启动一个游戏(使用Java 杰帕内尔元';t显示,java,swing,jpanel,Java,Swing,Jpanel,我有一个类,它应该启动一个游戏(使用main()),以及游戏的开始屏幕。带有main()(名为Starter)的类扩展了JFrame,创建了一个新的OpeningScreen类(扩展JPanel),并将其添加到JFrame中 由于某些原因,OpeningScreen不会添加到JFrame。代码: 起动机等级: import javax.swing.*; import java.awt.*; public class Starter extends JFrame { public St
main()
),以及游戏的开始屏幕。带有main()
(名为Starter
)的类扩展了JFrame
,创建了一个新的OpeningScreen
类(扩展JPanel),并将其添加到JFrame中
由于某些原因,OpeningScreen
不会添加到JFrame。代码:
起动机
等级:
import javax.swing.*;
import java.awt.*;
public class Starter extends JFrame {
public Starter(){
setSize(500,500);
setResizable(false);
setTitle("Ping-Pong Battle");
setDefaultCloseOperation(EXIT_ON_CLOSE);
OpeningScreen openingS = new OpeningScreen();
add(openingS);
setVisible(true);
}
public static void main(String[]args){
Starter starter = new Starter();
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class OpeningScreen extends JPanel {
public OpeningScreen(){
setBackground(Color.BLACK);
setFocusable(true);
setVisible(true);
}
public void paint(Graphics g){
// Soon code here to be drawn.
}
public void startGame(){
Board board = new Board();
}
}
打开屏幕
课程:
import javax.swing.*;
import java.awt.*;
public class Starter extends JFrame {
public Starter(){
setSize(500,500);
setResizable(false);
setTitle("Ping-Pong Battle");
setDefaultCloseOperation(EXIT_ON_CLOSE);
OpeningScreen openingS = new OpeningScreen();
add(openingS);
setVisible(true);
}
public static void main(String[]args){
Starter starter = new Starter();
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class OpeningScreen extends JPanel {
public OpeningScreen(){
setBackground(Color.BLACK);
setFocusable(true);
setVisible(true);
}
public void paint(Graphics g){
// Soon code here to be drawn.
}
public void startGame(){
Board board = new Board();
}
}
有什么问题吗?谢谢
编辑:OpeningScreen的构造函数确实运行,但不会将背景漆成黑色。另外,尝试在paint()中绘制对象也不起作用。我认为,因为您覆盖了paint(),所以背景不会被绘制,所以看起来好像没有添加面板。对绘画方法进行注释会使窗口变黑。
另外,绘画方法对我来说也很有效,也许你的颜色设置为黑色,所以它不会显示在黑色背景上?在绘图之前,请尝试使用g.setColor(Color.white)。我认为,因为您覆盖了paint(),所以背景没有被绘制,所以看起来好像没有添加面板。对绘画方法进行注释会使窗口变黑。
另外,绘画方法对我来说也很有效,也许你的颜色设置为黑色,所以它不会显示在黑色背景上?在绘图之前,请尝试使用g.setColor(Color.white)。您的问题源于在
打开屏幕
类中重写绘制
。没有绘制背景,因为您从未绘制过背景!调用super.paint(g)
修复此问题
但是,只需将代码移动到paintComponent
此方法正确地将黑色背景绘制为红色正方形:
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(100, 100, 100, 100);
}
您的问题源于覆盖
打开屏幕
类中的绘制
。没有绘制背景,因为您从未绘制过背景!调用super.paint(g)
修复此问题
但是,只需将代码移动到paintComponent
此方法正确地将黑色背景绘制为红色正方形:
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(100, 100, 100, 100);
}
尝试覆盖
paintComponent(Graphics g)
而不是paint(Graphics g)
nope,同样的问题:\n尝试覆盖paintComponent(Graphics g)
而不是paint(Graphics g)
nope,同样的问题:\n我注释掉了paint()方法,它成功了(黑色背景)。但是现在我想在面板中绘制,我需要再次添加paint()方法,然后出现同样的问题。知道如何解决这个问题吗?在做其他事情之前,尝试在paint方法中添加super.paint(g)。@Josh看到我的答案了吗。两者都可以。我注释掉了paint()方法,它成功了(黑色背景)。但是现在我想在面板中绘制,我需要再次添加paint()方法,然后出现同样的问题。知道如何解决这个问题吗?在做其他事情之前,尝试在paint方法中添加super.paint(g)。@Josh看到我的答案了吗。两者都可以。好吧,忘了超级油漆(g)。非常感谢:)通常是覆盖paintComponent
而不是paint
作为执行自定义绘制的首选方式……好吧,忘了super.paint(g)。非常感谢:)它通常是覆盖paintComponent
而不是paint
作为执行自定义绘制的首选方式。。。