将 GUI 添加到 class

Add a GUI to class

我想知道如何将 GUI 添加到我的程序中。我已经开始在 Blue J 中创建一个 java 程序,该程序的第一个 class 是一个 class,它已被其他 classes 扩展。

现在我也必须制作一个 GUI,但根据我的理解,我只能实现一个界面,因为 GUI 扩展了 class 框架。问题是我想为我的 class 创建一个 GUI,它也有实例变量,所以有解决办法吗?我可以在不对扩展做太多改动的情况下让我的第一个 class 成为一个界面吗?

代码:

public class Players /* Class name */
{

    private int attack; /* Instance variables* */
    private int defence;
    private int jump;

    public Players(int a, int d, int j) /* Constructor being defined */
    {
        int total = a + d + j;
        if((total) == 100)
        {
            attack = a;
            defence = d;
            jump = j;
        }
        else
        {
            System.out.println("Make stats add to 100");
        }
    }

    public Players()/* Default contructor if not user defined */
    {
        attack = 34;
        defence = 33;
        jump = 33;
    }

    public void addAttack(int a)
    {
        attack += a;
    }

    public void addDefence(int a)
    {
        defence += a;
    }

    public void addJump(int a)
    {
        jump += a;
    }

    public void getBasicStats()
    {
        System.out.println(attack + " " + defence + " " + jump);
    }
}

这是我的第一个 class 和我的超级class 其他大多数 classes

我建议首先使用 netbeans。从那里您可以轻松地 select 预创建 classes,例如 Jframes。更容易学习。您可以通过拖放按钮和任何您需要的方式从那里创建一个 GUI。

这是在 netbeans 中创建 GUI 的 youtube 图。

https://www.youtube.com/watch?v=LFr06ZKIpSM

如果您决定不使用 netbeans,则必须使用 class 创建 swing 容器来创建界面。

我建议学习如何使用 Swing。您将有几个不同的 类 一起互动。事实上,将创建和管理 GUI 的代码与执行底层逻辑和数据操作的代码分开被认为是一种很好的做法。

另一个建议: 学习 JavaFX 并从 Oracle 下载 SceneBuilder:here 在我的大学他们已经停止教Swing并开始教JavaFX,说JavaFX已经从Swing手中接过宝座。

SceneBuilder 非常易于使用,拖放概念。它创建一个 FXML 文件,用于声明您的程序 GUI。

How will I declare aan instance variable inside the GUI class?

如下所示,您可以从这样的事情开始,请注意您的应用程序应该能够将您的数据分发给其他 classes,例如我将 getBasicStats() 更改为 return a String,这样你就可以在任何地方使用你的应用程序 class,我想这就是为什么你对在哪里放置 GUI 代码感到困惑...

public class PlayersGUI extends JFrame {

    private static final long serialVersionUID = 1L;

    private Players players; // instance variable of your application

    private PlayersGUI() {
        players = new Players();
        initGUI();
    }

    private void initGUI() {
        setTitle("This the GUI for Players application");
        setPreferredSize(new Dimension(640, 560));
        setLocation(new Point(360, 240));

        JPanel jPanel = new JPanel();
        JLabel stat = new JLabel(players.getBasicStats());

        JButton attack = new JButton("Attack!");
        attack.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                players.addAttack(1);
            }
        });

        JButton hugeAttack = new JButton("HUGE Attack!");
        hugeAttack.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                players.addAttack(10);
            }
        });

        JButton defend = new JButton("Defend");
        defend.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                players.addDefence(1);
            }
        });

        JButton showStats = new JButton("Show stats");
        showStats.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stat.setText(players.getBasicStats());
            }
        });

        jPanel.add(stat);
        jPanel.add(attack);
        jPanel.add(hugeAttack);
        jPanel.add(defend);
        jPanel.add(showStats);

        add(jPanel);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                PlayersGUI pgui = new PlayersGUI();
                pgui.pack();
                pgui.setVisible(true);
            }
        });
    }
}