在JAVA编程中
我想创建一个技能程序,就像魔兽世界一样,,, 我的问题是:操作侦听器希望最终确定整数sp…但是当我最终确定整数sp时,它说无法更改最终整数的值 以下是代码,请尝试运行它:在JAVA编程中,java,swing,Java,Swing,我想创建一个技能程序,就像魔兽世界一样,,, 我的问题是:操作侦听器希望最终确定整数sp…但是当我最终确定整数sp时,它说无法更改最终整数的值 以下是代码,请尝试运行它: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Skills { public static void main(String[] args) { //DECLARATION int sp = 0
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Skills
{
public static void main(String[] args)
{
//DECLARATION
int sp = 0;
JFrame skillframe = new JFrame("Skills");
final JPanel panel1 = new JPanel();
final JPanel panel2 = new JPanel();
ImageIcon s1 = new ImageIcon("skill1.jpg");
ImageIcon s2 = new ImageIcon("skill2.jpg");
ImageIcon s3 = new ImageIcon("skill3.jpg");
ImageIcon s4 = new ImageIcon("skill4.jpg");
ImageIcon s5 = new ImageIcon("stats.gif");
final JButton skills = new JButton("Skills");
JButton skill1 = new JButton(s1);
JButton skill2 = new JButton(s2);
JButton skill3 = new JButton(s3);
JButton skill4 = new JButton(s4);
JButton stats = new JButton(s5);
final JButton back = new JButton("BacK");
final JButton levelup = new JButton("Level UP!");
JLabel points = new JLabel("Skill Points : " + sp );
///SETTINGS :
// Skills
panel1.add(skills);
skills.setBounds(226, 82, 64, 64);
skills.setBackground(Color.black);
skills.setForeground(Color.white);
// Level UP!
panel1.add(levelup);
levelup.setBounds(10, 82, 100, 64);
levelup.setBackground(Color.black);
levelup.setForeground(Color.white);
// Skill 1
panel2.add(skill1);
skill1.setBounds(10, 10, 64, 64);
// Skill 2
panel2.add(skill2);
skill2.setBounds(82, 10, 64, 64);
// Skill 3
panel2.add(skill3);
skill3.setBounds(154, 10, 64,64);
// Skill 4
panel2.add(skill4);
skill4.setBounds(226, 10, 64, 64);
// Stats
panel2.add(stats);
stats.setBounds(10, 82, 64, 64);
// Back
panel2.add(back);
back.setBounds(226, 82, 64, 64);
back.setBackground(Color.black);
back.setForeground(Color.white);
// Points
panel2.add(points);
points.setBounds(100, 82, 100, 64);
points.setForeground(Color.white);
// Frame
skillframe.setSize(310,195);
panel1.setSize(310,195);
panel2.setSize(310,195);
skillframe.add(panel1);
skillframe.add(panel2);
panel1.setBackground(Color.black);
panel2.setBackground(Color.black);
panel1.setLayout(null);
panel2.setLayout(null);
panel2.setVisible(false);
skillframe.setVisible(true);
// ACTIONLISTENER
skills.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
panel1.setVisible(false);
panel2.setVisible(true);
//.......................................................................................................................................................
back.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
panel1.setVisible(true);
panel2.setVisible(false);
}
});
//.......................................................................................................................................................
}
});
//...........................................................................................................................................................
levelup.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sp ++;
}
});
//...................................................................................................................................
}
}A
final
变量是,嗯,final
。这意味着它的值在初始化后不能更改(或者,对于对象类型,它的引用不能更改)
参考:
它不适用于++
的原因是它实际上是一个重新分配(sp=sp+1
)
编辑
另外,不将其声明为final不起作用的原因是,您正在匿名类中使用它。为了能够在匿名类中使用它,它必须声明为final
,因为编译器需要确保引用实际上是它期望的引用。如果它可以更改运行时,匿名类实际上会对错误的变量进行操作
但由于您试图在这个anynmous类中重新分配它,所以它不能是最终的。。。所以你想做的是不可能的。我建议您创建一个新类,跟踪您的
sp
,然后在此对象上创建一个increment()
方法。如果您不懂英文“无法更改最终整数的值”,您可以用谷歌翻译它。您应该将sp
变量设置为类成员private int-sp代码>。另外,开始使用new…
并将代码拆分为几个方法,而不是将所有内容都放在main
中。最后,考虑使用LayOutMeor而不是设置它<代码> null <代码>无处不在。你应该重新措辞和格式化你的问题,并把代码降到一点。你能复制我的代码并运行它吗。。。。给我一些解决办法,因为我是个乞丐对不起我的失礼。。你能复制我的代码并运行它吗。。。。给我一些解决方案,因为我是一个乞丐,对不起,你已经测试过了。只是不要声明它是final。但是当我不声明它是final时,它说我需要确定int,,,当我确定int时,它说不能更改,,,我也尝试了这个(sp=sp+1),但它不起作用。另一个解决方案是一个单元素的final数组。