2010-11-09 63 views
0

我写了一个方法来创建一个窗体(3个按钮和一个文本框),然后我在主要调用它。 但是当我运行程序之前,我在窗体中输入信息(方法form6), 其他执行的命令! “s4和ontname以表格形式”。 这是我的代码:::::::::::java窗体按钮顺序执行

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

字符串S4 = form6的一部分(); // s4是由方法返回的。 System.out.println(“s3333 * ”+ s4);
System.out.println(“ont
:”+ ontname); //它是全局的} /////////////////////////// ///////////////////////////

我有2个问题:::

1 ---当窗体运行时,执行其他命令! 他们的订单执行是什么? 2. ---我想定义一个按钮,当我点击它时,它会关闭窗体。

谢谢大家。

回答

0

您不能在此方法中返回值,因为ActionListenerInterface不允许这样做。但是你可以在actionPerformed()方法中调用另一个方法,并将ontname传递给它。

您也可以关闭新方法中的第三个按钮。或者将第三个按钮定义为final,并在actionPerformed()方法中使用它。

E.g.

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 
} 
+0

谢谢大家。我明白。我还有一个问题:我写一个方法来创建一个表单,然后我把它称为主表单。 public static void main(String [] args){System.out.println(“* begin main *”); //调用表单方法String s4 = form6(); //打印全局变量System.out.println(“s3333 **”+ s4); System.out.println(“ont *:”+ ontname); //它是全局的}但是当我运行程序之前,我在窗体中输入信息(方法form6),执行其他命令!在窗体运行时,其他命令被执行!他们的订单执行是什么? - fateme.hosseini – 2010-11-09 09:17:19

1

如果我正确获取代码,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 
} 

Alternativly:(只)宣布ontName作为类的静态成员:

private static String ontName = ""; // <-- accessible from main method 
public static void main(String[] args) { 
    // ... 
} 
// more methods. 
0

你也许可以定义变量ontname为全球,您的功能之外:

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

// ... 

System.out.println("filepath: "+ontname); 
+0

无论如何。但是当表单正在运行时,其他命令被执行! “System.out.println(”filepath:“+ ontname);”打印“null”。 – 2010-11-15 04:56:17

0

如果您想要记住这些值,那么它们应该是班级变量。

但是,通常情况下,您会希望将这些传递给其他方法,以对它们进行一些处理(或者说,将它们保留在文件中)。您可以将这些参数作为参数传递给其他方法。

(第二个是在大多数情况下更好的,我不知道你的应用程序很多,所以我无法给出一个答案)

还有其他问题,您的代码:

  1. 您需要检查使用是否在打开的对话框中单击了“确定”或“取消”按钮来决定是否获取文件。

  2. String filename = File.separator+"c:";确实没有意义。也许你的意思是String filename = "c:"+File.separator;但即使这样也不是很有用。 File.separator用于获取特定于平台的文件分隔符char(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

谢谢大家。我明白。我还有一个问题:我写一个方法来创建一个表单,然后我把它称为主表单。 public static void main(String [] args){ \t \t System.out.println(“* begin main *”); \t \t //调用形式方法 \t \t String s4 = form6(); \t \t //打印全局变量 \t \t System.out.println(“s3333 **”+ s4);但是当我运行程序之前,我在窗体(方法form6)中输入信息之前,其他正在执行的命令! – 2010-11-09 09:04:43

+0

窗体运行时,执行其他命令!他们的订单执行是什么? – 2010-11-09 09:14:07