Как получить значение из частного метода

Я создал с помощью NetBeans jSlider ChangeEvent со следующим кодом:

public class Slider extends javax.swing.JFrame {
    public Slider() {
         initComponents;
         field.getText();
         String fieldVal = field.getText();
         jtextField1.setText(fieldVal):
    }

    public JTextField getField() {
         return field;
    }

    public void setField(JTextField field) {
          this.field = field;
    }

    private void sliderStateChanged(javax.swing.event.ChangeEvent evt) { 
          int value = slider.getValue();
          String val = value + "";
          field.setText(val + "%");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Slider().setVisible(true);
        }
    });
    }
}

Итак, у меня есть JTextField (поле), который получает значения от jSpiner. Все работает нормально, но я хочу взять "val" и сделать некоторые вычисления с ним.

Но я не могу этого сделать, потому что это частный метод, и я попытался сделать его публичным, Refactor -> Change Параметры метода, но он выдает мне следующее предупреждение: Блок текста только для чтения не может быть реорганизован., И он не работает.

Я также пытался делать геттеры и сеттеры, но все еще не работал. Все, что я хочу, это принять это значение. Я мог бы взять его непосредственно из JTextField (поле), но я хочу, чтобы в нем также был символ "%", чтобы я не мог выполнять вычисления... Может кто-нибудь помочь мне с идеей? Я знаю, что я с чем-то не прав, но не знаю, где ошибка. Или есть возможность поставить "%" в текстовое поле другим способом? Мне нужна помощь, спасибо!

С наилучшими пожеланиями, Юлия

4 ответа

Решение

Из вашего отредактированного вопроса я вижу, что все, что вам нужно, это текстовое поле, показывающее значение ползунка с добавленным %.

Вот пример кода, показывающий это. https://gist.github.com/anonymous/96e898ec41cd2ed0f821

Создайте файл с именем NewJFrame.java, скопируйте и вставьте код и запустите, чтобы увидеть результат.

Что касается вашего кода, я думаю, что что-то не так с текстовым полем, возможно, оно не инициализировано. Если вы поделитесь всем своим кодом, я могу найти ошибку.

Java Отражение на помощь! Используйте getDeclaredField для класса, а затем setAccessible(true); наконец, рефлексивно получить значение через field.get(instance)! Тух-Дух.

В качестве альтернативы, и гораздо более сложно, реализовать ClassLoader и изменить "модификаторы" для указанного поля / метода, чтобы сделать его общедоступным...

В целом, рефлексия имеет серьезные последствия и влияние. Пожалуйста, прочитайте это.

Из того, что я понимаю, вы не можете сделать String val глобальной переменной вне области видимости, а не локальной переменной, а затем работать с ней?

Временное решение может быть:

Если вы хотите внести изменения в запрещенную область, скопируйте и вставьте код в новый .java файл и редактировать.

Если речь идет только о значении, создайте открытую переменную и назначьте JSlider значение.

Другие вопросы по тегам