Я делаю программу линкора, которую я пытаюсь работать с графическим интерфейсом, но он не хочет работать. Теоретически он должен работать, так это то, что графический интерфейс запускается, он выдает вопрос в поле (которое работает), а затем компьютер ждет и ничего не выполняет, пока вы не нажмете кнопку после ответа на вопрос. Проблема в том, что мой метод, который ждет, пока вы не нажмете кнопку, чтобы получить данные в текстовом поле, ничего не делает. Я написал аналогичную часть кода, которая демонстрирует мою проблему ниже.Моя кнопка качания Java не работает
Test.java (основной класс)
package taest;
import javax.swing.*;
public class Test {
public static void main(String args[]){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@SuppressWarnings("unused")
JFrame frame = new Frame();
}
});
Frame.display.setText(getButtonClick());
}
public static String getButtonClick(){
while(true){
if (Frame.hasClicked){
break;
}
}
return Frame.text.getText();
}
}
Frame.java (класс Frame) пакет taest;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frame extends JFrame{
JFrame panel = new JFrame("Something");
public static JTextArea text = new JTextArea();
JButton button = new JButton("Click");
public static JTextField display = new JTextField("NOthing");
static boolean hasClicked = false;
static String storage = "";
public Frame(){
setLayout(new BorderLayout());
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
hasClicked = true;
storage = text.getText();
}
});
Container c = getContentPane();
c.add(display, BorderLayout.CENTER);
c.add(text, BorderLayout.PAGE_START);
c.add(button, BorderLayout.PAGE_END);
setVisible(true);
}
}
'static' не является механизмом межклассовой коммуникации и особенно бесполезен в среде GUI. – MadProgrammer
Вы рассматриваете использование [Pattern наблюдателя] (http://www.oodesign.com/observer-pattern.html) – MadProgrammer