用户界面的问题



我对在java中操作UI有点陌生,所以请原谅我这个问题,我找不到答案。

|我正在尝试做一个纸牌游戏,我有一个引擎类来操纵所有的纸牌和游戏,我想让引擎告诉UI更新分数,纸牌位置或纸牌图像。

这是我如何启动UI的一个例子,这里的问题是我没有任何实例来操纵JLabels使用实例方法我在Board类,我不能创建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添加了一些jlabel,并且有几个方法可以更改文本和图像。

我的问题是如何正确调用这些方法(我创建的那些改变文本和img),我也对如何处理这个问题的任何其他建议开放。

*编辑:

下面是我的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(字符串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();
                }
            }
        });
    }
}

启动GUI的基本习惯用法是:

SwingUtilities.invokeLater(new Runnable() {
  JFrame frame = new JFrame("My Window Title");
  frame.setSize(...);
  frame.add(new Board()); // BorderLayout.CENTER by default
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setLocationRelativeTo(null); // center on main screen
  frame.setVisible(true);
});

相关内容

  • 没有找到相关文章

最新更新