我制作简单的游戏,它由2个文件组成,第一个文件是“Alibaba.java”,它是从JFrame扩展的,我用它来显示游戏的一般内容!,
并且第二个文件是从JPanel扩展的“intro.java”,我用它来显示游戏的介绍,其中包括(标题&背景和人物),
当我尝试在简介中添加一个简单的按钮时,我的问题出现了! ,我做了一个创建按钮的功能,但问题是当我运行游戏时,我添加它的按钮不会出现! ,但是当我尝试从第一个从JFrame扩展的文件中添加它时,它就出现了! , 那我的代码有什么问题?是JPanel不接受JButtons!或者我必须从JFrame文件创建按钮?
所以我需要知道如何在Jpanel中添加Jbutton而不是在JFrame Direct中添加Jbutton !!
这是我的代码示例,其中包含问题:
第一个文件(Alibaba.java)
package alibaba;
import java.awt.Color;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Alibaba extends JFrame {
public Alibaba(){
super("Alibaba");
Intro intro = new Intro();
this.add(intro);
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = environment.getDefaultScreenDevice();
device.setFullScreenWindow(this);
}
public static void main(String[] args) {
Alibaba alibaba = new Alibaba();
}
}
第二个文件(Intro.java):
package alibaba;
import javax.swing.JButton;
public class Intro extends javax.swing.JPanel implements Runnable{
Thread _intro_run;
public Intro() {
_intro_run = new Thread(this);
_intro_run.start();
}
@Override
public void run() {
// Here i tried to add a button to the Intro !!!
this.add(this.createbutton("Exit"));
}
public JButton createbutton(String text){
JButton _button = new JButton(text);
return _button;
}
}
所以请告诉我是什么问题以及如何解决它,对不起,但我是java新手,对编程游戏世界来说是新手! ,,谢谢你:)。
答案 0 :(得分:3)
你必须在主线程中添加JButton
,交叉线程Component
操作不好。
例如:
public Intro() {
JButton exitButton = new JButton("Exit");
this.add(exitButton);
}
或者,使用SwingUtilities.invokeLater(Runnable)
。例如,在您的run方法中:
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
add(createbutton("Exit"));
}
}
}
根据讨论,您似乎重写了paint
或paintComponent
方法。您需要在其中调用super
,例如:
void paint(Graphics g) {
super.paint(g);
// do other stuff to g
}
答案 1 :(得分:3)
此外,您有一个实现Runnable的JPanel是一个不好的迹象。在Java中,所有UI工作(这里使用Swing组件)都是从事件调度线程完成的 - 拥有一个实际的Swing组件(你的Intro类是一个JPanel)Runnable面对它。
答案 2 :(得分:3)
建议:
revalidate()
来完成的。在此之后,您还应该在JPanel上调用repaint()
。