向类添加GUI

时间:2016-02-21 17:50:05

标签: java user-interface bluej

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

现在我必须制作一个GUI,但从我的理解,我只能实现一个接口,因为GUI扩展了类Frame。问题是我想创建我的类的GUI,它也有实例变量,所以有解决方法吗?我可以在不改变扩展名的情况下使我的第一个类成为接口吗?

代码:

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);
    }
}

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

这是一个在netbeans中创建GUI的youtube tut。

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

如果你决定不使用netbeans,你将不得不用你的班级创建摆动容器来制作界面。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  

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

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