java - 用户界面问题

标签 java swing user-interface

我对用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/

相关文章:

java - 添加 Controller 后 Swagger UI 中不允许使用该方法

java - JScrollPane 中的文件文本和复选框 Swing

java - 使用从 Json 响应传递的对象填充 JTable

c++ - "drawed"这样的UI可以在MFC中完成吗

java - 将一个 Hibernate 命名查询包含在另一个 Hibernate 命名查询中

java - 如何在 lambda 表达式中使用 Android 的 DrawerLayout.DrawerListener?

java - commons-httpclient 和 httpclient 之间有什么关系,都来自 apache

java - 当我单击按钮时,JTable 永久为单元格着色

java - 从 JPanel 中删除 JPanel

user-interface - 更酷的 ASCII 旋转器?