выполнение заказа кнопки формы Java - PullRequest
0 голосов
/ 09 ноября 2010

Я пишу метод для создания формы (3 кнопки и текстовое поле), затем я вызываю его в основном.но когда я запускаю программу, прежде чем вводить информацию в форму (метод form6), выполняются другие команды!msgstr "s4 и одноименное имя изменено в форме".это часть моего кода :::::::::::

////////////////////////////////////////////////////////////////////////// 
public static void main(String[] args) {
System.out.println("*begin main*"); // call form method 

String s4 = form6 ();// s4 возвращается методом.System.out.println ("s3333 *" + s4);
System.out.println ("ont
:" + ontname); // это глобально} //////////////////////////////////////////////////////////////////////////

У меня есть 2 вопроса :::

1 --- Во время работы формы другие команды выполняются!Каково их выполнение заказа?2. --- я хочу определить кнопку, чтобы при нажатии на нее она закрывала форму.

спасибо всем.

Ответы [ 4 ]

1 голос
/ 09 ноября 2010

Если я правильно понимаю ваш код, ontname является либо (1) членом класса (объявленным вне метода), либо (2) локальной переменной, которая объявлена ​​в методе, содержащем этот фрагмент кода.

В обоих случаях нет необходимости «возвращать» ontname только потому, что он не объявлен внутри анонимного экземпляра ActionListener.

Следующий пример иллюстрирует типичный шаблон для этой проблемы:

public void someMethod() {
  // ...
  button2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
      String filename = File.separator+"c:";
      JFileChooser fc = new JFileChooser(new File(filename));
      fc.showOpenDialog(null);
      File selFile = fc.getSelectedFile();
      setOntName(selFile.getPath());  // <-- here we call another method
    }
  });
  // ...
}

void setOntName(String ontName) {
  // do something with ontName
}

Альтернативно: объявить ontName как статический член класса (только):

private static String ontName = "";  // <-- accessible from main method
public static void main(String[] args) {
  // ...
}
// more methods.
0 голосов
/ 09 ноября 2010

Если вы хотите запомнить значения, то они должны быть переменными уровня класса.

Но, как правило, вы хотите передать их какому-либо другому методу, чтобы выполнить некоторую обработку (или, скажем, сохранить их в файле). Вы можете передать их как параметры другому методу.

(Второй вариант в большинстве случаев лучше, я не очень разбираюсь в вашем приложении, поэтому не могу дать один ответ)

Есть другие проблемы с вашим кодом:

  1. Вам необходимо проверить, нажал ли пользователь кнопку «ОК» или «Отмена» в открытом диалоговом окне, чтобы решить, получить файл или нет.

  2. String filename = File.separator+"c:"; на самом деле не имеет смысла. Возможно, вы имели в виду String filename = "c:"+File.separator; Но даже это не очень полезно. File.separator предназначен для получения специфичного для платформы символа разделителя файлов (\ в Windows, / в Linux), но, поскольку вы жестко программируете c:, вы все равно ограничиваете свое приложение для Windows. Возможно, вы захотите иметь лучший платформо-независимый способ (начните с пути «по умолчанию», new JFileChooser() без аргументов, а затем запомните путь, который последний раз использовал пользователь, и продолжайте с него)

  3. Если аргументом метода showOpenDialog является ваш родительский фрейм, тогда диалог будет центрирован на родительском фрейме и в большинстве случаев будет выглядеть лучше.

Возможно, вы захотите пересмотреть имена переменных.

button2.addActionListener(new ActionListener()
{    
   public void actionPerformed(ActionEvent e)
   {
      String filename = File.separator+"c:";
      JFileChooser fc = new JFileChooser(new File(filename));
      int option = fc.showOpenDialog(null);
      if(option = JFileChooser.APROVE_OPTION)
      {
         File selFile = fc.getSelectedFile();
         String ontname=selFile.getPath();
         System.out.println("filepath: "+ontname); //it works correctly.
         doSomeOperation(ontname); //Or, declare ontname as a class level variable.
      }
  }
}); 
0 голосов
/ 09 ноября 2010

Возможно, вы можете определить свою переменную ontname как глобальную вне вашей функции:

var ontname = null;
button2.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
// ...
    ontname=selFile.getPath();
  }
});

// ...

System.out.println("filepath:  "+ontname);
0 голосов
/ 09 ноября 2010

Вы не можете вернуть значение в этом методе, потому что ActionListenerInterface не позволяет это. Но вы можете вызвать другой метод из метода actionPerformed () и передать ему ontname.

Вы также можете закрыть третью кнопку в новом методе. Или определите третью кнопку как окончательную и используйте ее в методе actionPerformed ().

* 1005 Е.Г. *

button2.addActionListener(new ActionListener(){ 
           public void actionPerformed(ActionEvent e){
           String filename = File.separator+"c:";
           JFileChooser fc = new JFileChooser(new File(filename));
           fc.showOpenDialog(null);
           File selFile = fc.getSelectedFile();
           ontname=selFile.getPath();
           System.out.println("filepath:  "+ontname); //it works correctly.  
           anotherMethod(ontname);   
         }
      });

private void anotherMethod(String path) {
        //doSomething with the path

        //close third button here
}
...