Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向类添加GUI_Java_User Interface_Bluej - Fatal编程技术网

Java 向类添加GUI

Java 向类添加GUI,java,user-interface,bluej,Java,User Interface,Bluej,我想知道如何将GUI添加到我的程序中。我已经开始用Blue J创建一个java程序,该程序的第一个类是一个被其他类扩展的类 现在我也必须做一个GUI,但据我所知,我只能在GUI扩展类框架时实现一个接口。问题是我想为我的类创建一个GUI,它也有实例变量,所以有解决办法吗?我可以让我的第一个类成为一个接口而不需要对扩展做太多修改吗 代码: 这是我的第一个类,也是大多数其他类的超类我建议首先使用netbeans。从那里,您可以轻松地选择预先创建的类,如Jframes。更容易学。您可以通过拖放按钮和您需

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

现在我也必须做一个GUI,但据我所知,我只能在GUI扩展类框架时实现一个接口。问题是我想为我的类创建一个GUI,它也有实例变量,所以有解决办法吗?我可以让我的第一个类成为一个接口而不需要对扩展做太多修改吗

代码:


这是我的第一个类,也是大多数其他类的超类

我建议首先使用netbeans。从那里,您可以轻松地选择预先创建的类,如Jframes。更容易学。您可以通过拖放按钮和您需要的任何东西从那里创建GUI

下面是一个youtube tut,用于在netbeans中创建GUI


如果您决定不使用netbeans,那么必须使用类创建swing容器来创建接口。

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

另一个建议: 了解JavaFX并从Oracle下载SceneBuilder: 在我的大学里,他们已经停止教Swing,开始教JavaFX,说JavaFX已经从Swing手中接过了王位

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

如何在GUI类中声明一个实例变量

如下图所示,您可以这样开始,注意您的应用程序应该能够将数据分发给其他类,例如,我更改了
getBasicStats()
以返回
字符串,这样您就可以在任何地方使用您的应用程序类,我想这就是为什么您对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);
            }
        });
    }
}

为了更快地帮助发布源代码。@VaibhavG当然,抱歉您的类不必是UI类,请按照中所示创建UI并在其中使用您的类。不相关,但是,时髦的缩进使代码更难阅读。@a4l那么,我可以创建GUI,然后再将其与我的类关联吗?我将尝试完全误读您的文章,尽管这一点仍然存在,您尝试在Netbeans中执行的操作将更容易管理。不幸的是,我需要使用上面提到的BlueJAs,为GUI创建一个单独的类,并从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);
            }
        });
    }
}