我对用java操作UI有点陌生,所以请原谅我这个问题,我在任何地方都找不到答案。
描述 |我正在尝试做一款纸牌游戏,我有一个引擎类来操纵所有纸牌和游戏,我希望引擎告诉 UI 更新分数、纸牌位置或纸牌图像。
这是我如何启动 UI 的示例,这里的问题是我没有任何实例来使用我在 Board 类中创建的实例方法来操作 JLabels,并且我无法在 EventQueue 之外创建实例因为我会违反“切勿在 UI 线程之外操作/创建 UI”
public class Engine {
public StartUp(){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (UnsupportedLookAndFeelException e) {
}
new Board().setVisible(true);
}
});
}
}
Board 类扩展了 JPanel 并在构造函数中向 ui 添加了一些 JLabels,并且具有多种更改文本和图像的方法。
我的问题是如何正确调用这些方法(我创建的用于更改文本和图片的方法),我也欢迎有关如何解决此问题的任何其他建议。
*编辑:
这是我的 Board 类的简单示例:
public class Board extends JFrame{
public JLabel img1;
public Board(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 265);
JPanel body = new JPanel(new GridBagLayout());
getContentPane().add(body);
img1 = new JLabel();
body.add(img1);
}
public void setImg1(String s){
img1.setIcon(new ImageIcon(s));
}
}
我希望能够从引擎访问板内的 setImg1(String s) 方法,以便能够在运行时更改当前图像
抱歉,如果我的问题表达错误
最终编辑:
解决了将引擎合并到主板中的问题。
感谢所有为您提供帮助并付出时间的人
最佳答案
public class MainFrame extends JFrame {
public MainFrame() {
super("Demo frame");
// set layout
// add any components
add(new Board()); // adding your board component class
frameOptions();
}
private void frameOptions() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack(); // or setSize()
setVisible(true);
}
public static void main(String[] a) {
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
new MainFrame();
} catch (Exception exp) {
exp.printStackTrace();
}
}
});
}
}
关于java - 用户界面问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945830/