2013-03-01 2 views
0

Я пытался какое-то время получить JButton, я должен вернуть строку, и у меня она работает до такой степени, но она работает только тогда, когда я использую метод System.out.println().Верните строку из пресса JButton Press Listener?

Мой Соответствующий код:

private String answer; 

public void inputDataButton(JButton inButton) 
{ 
inButton.addActionListener(new Action1()); 
} 

public String returnAnswer() 
{ 
return answer; 
} 

private void fileAnswer(String inString) 
{ 
answer = new String(inString); 
} 

public class Action1 implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     String sub = JOptionPane.showInputDialog("Input The Date"); 
     fileAnswer(sub); 
    } 
} 

С моим Main контролировать его:

public class test 
{ 
    protected static JTextField text; 

    public static void main(String[] args) 
    { 
    javaUI base = new javaUI("Date Killer", 800, 800); 

    JLabel label = new JLabel("Place Holder"); 
    base.addLabel(label, 1, 0, false); 

    JButton button = new JButton("Press Here"); 
    base.addButton(button, 0, 0, false); 

    String str = "EMPTY"; 

    base.inputDataButton(button); 

    while (str == "EMPTY") 
     { 
     str = base.returnAnswer(); 
     } 

    System.out.println(str + " TEST"); 
    label.setText(str + "SETTED"); 
    } 
} 

JavaUI это просто еще один класс с упрощает весь JFrame и настройку JPanel для этикетки, кнопки и т.д. .

Anyways, heres my problem. В основном классе в инструкции while str успешно устанавливается в строку , если у меня есть оператор System.out.println() непосредственно после. Это, очевидно, довольно беспорядок терминала, поскольку он повторяет «ПУСТОЙ» 100 раз, пока кнопка не будет нажата.

Однако, если я удалю это утверждение, ничего явно не распечатано, но str никогда не устанавливается на str.

Я довольно давно общался с этим (новый для всего java-файла UI, в основном, просто работал в части вычисления), и я еще не нашел рабочего решения, которое не делает беспорядок моего терминала. Спасибо за помощь!!!

Cail

+0

Что такое 'System.out.println()' оператор, который заставляет его работать? И почему 'base.returnAnswer()' в цикле 'while'? Всегда ли он возвращает разные ответы каждый раз, когда он называется? –

+0

Поскольку я не знаю, в какую точку нажимается кнопка, я установил цикл while для строки, которая продолжает циркулировать, пока строка не будет «ПУСТОЙ». Однако он только выходит из цикла, если в цикле есть оператор System.out.println (str), иначе он становится бесконечным. –

ответ

1

1) Это немного странно использовать цикл «ждать» для действия, чтобы это произошло. Вы можете смотреть свое использование процессора, и он может быть мертвым, если он будет навсегда.

2) Кроме того, метод будет возвращен независимо от того, нажата ли ваша кнопка. - Прежде чем действие произойдет, метод возвращает строку null в соответствии с вашим кодом. И в вашем основном методе str == "EMPTY" скоро станет ложным после первого раунда. Затем вы увидите «нулевой ТЕСТ» на экране.


Попробуйте поставить код после while цикла в actionPerformed метод или метод fileAnswer и удалить цикл:

public void actionPerformed(ActionEvent e) 
{ 
    String sub = JOptionPane.showInputDialog("Input The Date"); 
    System.out.println(sub + " TEST"); 
    label.setText(sub + "SETTED"); 
} 

Кроме того, я не знаю, почему вы звоните answer = new String(inString). Если вы хотите присвоить его другой переменной, вам нужно позвонить только answer = inString, поскольку String не поддаётся изменению. И в этом случае вы не должны этого делать.

+0

К сожалению, из-за ответа = new String (inString), в моем последнем коде я изменил это. Я мог бы сделать это, за исключением того, что я действительно хочу сделать, это передать его main и поместить введенную строку в str, поскольку я планирую использовать его для дальнейших вычислений, метка не является необходимостью, только для визуального аспекта для готовая программа, то, что я пытаюсь сделать, это нажать кнопку, чтобы вернуть введенную строку в строку String main. Спасибо за помощь, хотя!:) –

+0

@CailDemetri Добро пожаловать. Дело в том, какой расчет вы пытаетесь сделать после нажатия кнопки, вы должны называть его методом 'actionPerformed()', как я показал. Я только что привел пример в ваш вопрос. В любом случае вам нужно изменить дизайн. Или вы могли бы показать оригинальные требования, и я мог бы помочь вам разработать более правильный способ выполнения этой работы. – shuangwhywhy

+0

ahhh, я понимаю, что вы имеете в виду, я мог бы попытаться создать статический класс для вычислений. Что касается того, что я пытаюсь сделать, создайте своего рода программу календаря, за исключением ее для кого-то другого, поэтому я не могу сделать какой-либо вход в командной строке. Поэтому я пытаюсь заставить пользователя ввести дату через нажатие кнопки ввода, созданную нажатием кнопки, которая захватывает введенную строку и выполняет вычисления на ней. Проблема в том, что я не могу понять, как вернуть указанную строку в мою главный. Я мог бы попробовать его с другим классом, но я бы скорее сделал это в основном. Спасибо, что очистили это: D –