2012-03-08 34 views
0

我在這裏丟失了什麼?ActionListener無法正常工作Java

public class abc extends JFrame { 
private JButton save = new JButton("Save"); 

public abc() { 
    JPanel p = new JPanel(); 
    save.addActionListener(new SaveL()); 
    p.add(save); 
    Container cp = getContentPane(); 
    p = new JPanel(); 
    p.setLayout(new GridLayout(2, 1)); 

    cp.add(p, BorderLayout.NORTH); 
    } 


} 

class SaveL implements ActionListener { 

     public void actionPerformed(ActionEvent e) {  
      System.out.println("Hello"); // nothing happens 

     } 
} 

爲什麼這裏

回答

6

您正在創建一個JPanel,將其添加到JButton中,然後創建一個新的JPanel並將該面板添加到您的JFrame。您需要將原始面板添加到您的內容窗格。

+0

謝謝。我已經從這裏調整了我的程序,並準備好了它在這裏完成的示例。我只是在查找這裏定義的SaveL的動作執行方法。程序如何在這裏工作http://www.java2s.com/Code/Java/Swing-JFC/Default ofFiledialogboxes.htm – Ank 2012-03-08 23:10:41

+1

@Ankur該程序創建一個新的'JPanel',添加東西到它,將它添加到內容窗格然後創建一個新的'JPanel'。您可能希望遵循[Swing教程](http://docs.oracle.com/javase/tutorial/uiswing/)來學習基礎知識。 – Jeffrey 2012-03-08 23:14:56

+0

我的代碼完全一樣,除了在上面的鏈接中的SaveL類的ActionPerformed中有System.out.println。爲什麼這不起作用 – Ank 2012-03-08 23:16:19

0
private JButton open = new JButton("Save"); 

save.addActionListener(new SaveL()); 

不是我的ActionListener工作並û聲明您保存爲開放?

+0

不,我沒有。這是一個複製/粘貼錯誤。我更新了我的代碼。我的程序中沒有出現任何錯誤。控制檯中沒有任何顯示。 – Ank 2012-03-08 22:56:26

5

你的代碼完全搞砸了。你實例化你的JPanel p兩次,你的按鈕被聲明爲「打開」,但實際上是「保存」。您將GridLayout與BorderLayour約束混合使用。以下代碼有效:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class abc extends JFrame { 
    private JButton save = new JButton("Save"); 

    public abc() { 
     JPanel p = new JPanel(); 
     save.addActionListener(new SaveL()); 
     p.add(save); 
     p.setLayout(new GridLayout(2, 1)); 

     add(p); 
    } 

    public static void main(String[] args) { 
     abc abc = new abc(); 
     abc.pack(); 
     abc.setVisible(true); 
    } 

} 

class SaveL implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Hello"); // nothing happens 

    } 
} 
1

您的代碼正在重新創建面板。它失去了按鈕。

我把它改爲:

public class abc extends JFrame{ 
    private JButton save = new JButton("Save"); 

    public abc() { 
     JPanel p = new JPanel(); 
     save.addActionListener(new SaveL()); 
     p.add(save); 
     Container cp = getContentPane(); 

     cp.add(p, BorderLayout.NORTH); 
    } 


} 

class SaveL implements ActionListener { 

     public void actionPerformed(ActionEvent e) {  
      System.out.println("Hello"); // nothing happens 

     } 
} 

和它的工作

+0

謝謝。我已經從這裏調整了我的程序,並準備好了它在這裏完成的示例。我只是在查找這裏定義的SaveL的動作執行方法。程序如何在這裏工作http://www.java2s.com/Code/Java/Swing-JFC/DemonstrationofFiledialogboxes.htm – Ank 2012-03-08 23:09:13

+0

@Ankur,對不起,但我不明白你的意思在你的評論 – 2012-03-08 23:13:18

+0

我的代碼是完全相同,除了我在上面的鏈接中的SaveL類的ActionPerformed中有System.out.println。爲什麼沒有工作 – Ank 2012-03-08 23:15:48