#java #swing
Вопрос:
Я использую java swing, и я пытался использовать новый текст в качестве параметра, но я не уверен, как это сделать, также есть тот факт, что у меня есть «});» который полностью испорчен, но он работает, и я попытался исправить это, но это не работает
этот код находится внутри моего основного
public String newText = "";
a.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JFrame popup = new JFrame("Choose...");
popup.setSize(250,250);
popup.setLayout(null);
popup.setVisible(true);
JButton o=new JButton("o");
o.setBounds(25,75,100,100);
popup.add(o);
o.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae, String newText){
newText = "O";
}
});
JButton x=new JButton("x");
x.setBounds(125,75,100,100);
popup.add(x);
if (!newText.equals(""))
a.setText(newText);
}
});
Комментарии:
1. Вы не можете поместить
public String
внутри main . Что такоеa
? 1) Пожалуйста, покажите полный класс 2) Что именно не работает и к какой переменной вы пытаетесь получить доступ?2. Пожалуйста, включите некоторые пояснения о том, что вы хотели, чтобы произошло, и каким образом это не работает (например, я хочу, чтобы это делало X, но вместо этого происходит Y).
3. Для этого вы можете использовать статическую переменную. Объявите свою
newText
переменную с помощьюpublic static String newText = ""
. Но, делая это,newText
будет общим для каждого экземпляра вашего класса4. Спасибо за помощь, я впервые использую stackoverflow. У меня есть ссылка на это replit.com/@JavaScriptGod/JavaSwing#Main.java
5.
newText = "O";
изменяет только аргумент (= локальную переменную) actionPerformed , это никак не повлияет на внешний мир. Вероятно, было бы неплохо не иметь нескольких переменных с именем newText…
Ответ №1:
Я пытался использовать
newText
в качестве параметра
Здесь?
public void actionPerformed(ActionEvent ae, String newText){
Это недопустимый код. ActionListener
это интерфейс; интерфейс — это контракт, который необходимо соблюдать. Вы не можете просто добавлять переменные к существующим сигнатурам методов.
Предполагая, что вы хотите изменить текст кнопки, вы могли бы сделать это
public class Main {
public String newText;
public static void main(String[] args) {
new Main().run();
}
public void run() {
System.out.printf("before: newText = %s%n", newText);
final JButton o = new JButton("o");
// ...
o.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae){
Main.this.newText = "O"; // Sets the field
System.out.printf("action: newText = %s%n", Main.this.newText);
o.setText(Main.this.newText);
}
});
System.out.printf("actionListener set : newText = %s%n", newText);
}
}
Однако попытка использования newText.equals
вне прослушивателя действий происходит в другом потоке, что означает, что код не выполняется «сверху вниз». Например. переменная не «установлена» в порядке выполнения, который считывается кодом. Добавлены операторы печати, чтобы показать это