0

その理由はわかりません。多分あなたは私を助けることができました

したがって、ここで 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

final 変数は実行時にどのように値を変更できますか? 変数の実際の値は、sliders[i].setValue(4); に書き込んだ値に依存します。しかし、正確な方法はわかりません...

そして、この変数のウォッチポイントを設定しようとしました...うまくいきません。1回はゼロで、次回はこのforループ値でプログラムが停止します。値は9、4、またはその他です...

4

3 に答える 3

3

参照を final として宣言すると、参照を変更することはできませんが、基になるオブジェクトの状態を変更することはできます。

変更できません

int[] array = somethingelse;

しかし

array[1] = 5;

有効です。

于 2012-10-09T18:58:43.263 に答える
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
于 2012-10-09T18:59:37.217 に答える
0

final を配列に設定しても、要素の値を追加または変更できないという意味ではありませんが、この変数に別の配列参照を割り当てることができるようになりました。ただし、その配列の要素を追加、更新、または削除できます

于 2012-10-09T19:00:12.030 に答える