Как получить значение из частного метода
Я создал с помощью 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
значение.