gpt4 book ai didi

java - Jbutton 与 Jpanel 和 JFrame 之间的区别?

转载 作者:行者123 更新时间:2023-12-01 06:57:23 29 4
gpt4 key购买 nike

我制作了一个简单的游戏,它由2个文件组成,第一个文件是“Alibaba.java”,它是从JFrame扩展而来的,我用它来显示游戏的一般内容!,

第二个文件是“intro.java”,它是从 JPanel 扩展而来的,我用它来显示游戏的介绍,其中包括(标题&背景&人物),

当我尝试在简介中添加一个简单的按钮时,出现了问题! ,我做了一个创建按钮的函数,但问题是当我运行游戏时,我添加的按钮没有出现! ,但是当我尝试从 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新手,编程游戏世界新手! ,,谢谢:)

最佳答案

你必须在主线程中添加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"));
}
}
}

根据讨论,您似乎正在重写 paintpaintComponent 方法。您需要在其中调用 super,例如:

void paint(Graphics g) {
super.paint(g);
// do other stuff to g
}

关于java - Jbutton 与 Jpanel 和 JFrame 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360387/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com