我不知道原因。也许你可以帮助我
所以这里的代码用8个滑块创建一个框架。
public class MyFrame extends JFrame {
ImagePanel imagePanel;
final int Minimum = 0;
final int Maximum = 10;
final int NumberOfSpheres = 8;
final int NumberOfScales = 10;
MyRandomAccessFile file;
final String[] s = {"Друзья и Окружение",
"Отношения", "Карьера и Бизнес",
"Финансы", "Духовность и Творчество",
"Личностный Рост", "Яркость Жизни", "Здоровье и Спорт"};
private final Color[] colors = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.PINK, Color.MAGENTA, Color.DARK_GRAY};
private final int[] array = {1, 0, 0, 0, 0, 0, 0, 0};
public MyFrame () {
setTitle("Wheel Of Life");
MySlider[] sliders = new MySlider[NumberOfSpheres];
JButton saveButton = new JButton("Save");
MyActionListener listener1 = new MyActionListener();
saveButton.addActionListener(listener1);
file = new MyRandomAccessFile();
//String s3 = "0 0 0 0 0 0 0 0";
//array = stringToIntArray(s3);
array[1] = 4;
JLabel[] labels = new JLabel[NumberOfSpheres];
imagePanel = new ImagePanel(colors, array);
System.out.println(array[1]);
JPanel mainPanel = new JPanel();
JPanel[] sliderPanels = new JPanel[NumberOfSpheres];
JPanel mainSliderPanel = new JPanel(new GridLayout(4, 2, 20, 20));
MyChangeListener listener = new MyChangeListener();
for (int i = 0; i < NumberOfSpheres; i++) {
sliders[i] = new MySlider(s[i]);
sliders[i].addChangeListener(listener);
labels[i] = new JLabel(s[i]);
labels[i].setForeground(colors[i]);
labels[i].setFont(new Font("Droid Sans", Font.BOLD, 20));
sliderPanels[i] = new JPanel();
sliders[i].setMinimum(Minimum);
sliders[i].setMaximum(Maximum);
System.out.print(array[i]);
sliders[i].setValue(4);
sliders[i].setMajorTickSpacing(1);
sliders[i].setMinorTickSpacing((int) 0.1);
sliders[i].setPaintLabels(true);
sliders[i].setPaintTicks(true);
sliderPanels[i].setLayout(new GridLayout(2, 1, 5, 5));
sliderPanels[i].add(sliders[i]);
sliderPanels[i].add(labels[i]);
mainSliderPanel.add(sliderPanels[i]);
}
mainPanel.setLayout(new BorderLayout());
mainPanel.add(imagePanel, BorderLayout.CENTER);
mainPanel.add(mainSliderPanel, BorderLayout.EAST);
mainPanel.add(saveButton, BorderLayout.SOUTH);
add(mainPanel);
}
输出就是这个
4 99999999
最终变量如何在执行时改变其值,到底是什么? 变量的实际值取决于我在sliders [i] .setValue(4)中写的值;但我不知道究竟是怎么回事......
我试图为这个变量设置一个观察点......不起作用。有一次它的零和下一次程序在这个for循环值中停止是9,4或其他...
答案 0 :(得分:3)
当您将引用声明为final时,您无法更改引用,但您可以更改基础对象状态。
你无法改变
int[] array = somethingelse;
但是
array[1] = 5;
有效。
答案 1 :(得分:1)
在Java中声明变量final时,它就像是说该名称不会被重新分配。并不意味着内容不会变得可变。通常可以修改数组和对象的内容。
final List<String> list = new ArrayList<String>();
list.add("foo");//ok
list.add("bar");//ok
list.remove(0);//ok
list = new ArrayList<String>(); //should cause compile error
答案 2 :(得分:0)
将final设置为数组并不意味着您无法添加或更改元素值,但这意味着您现在可以为此变量指定另一个数组引用。但您可以添加,更新或删除该数组中的元素