我想知道如何在程序中添加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);
}
}
这是我的第一个课程,也是我大多数其他课程的超类
答案 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);
}
});
}
}