2013-04-09 52 views
2

是否有可能在一個文件上有一個按鈕,並在另一個文件中使用actionPerformed(ActionEvent e)方法?我試圖添加一個actionListener到一個按鈕,choose1在文件trialdump.java中,但actionPerformed(ActionEvent e)方法在文件listen.java中。我試圖擴展公共類trialdump延伸監聽,但它顯示一個錯誤。任何想法如何將該方法添加到按鈕?謝謝。JButton和actionPerformed方法可能在不同的文件中嗎?

這是我在文件trialdump.java代碼:

package Core; 

import javax.swing.GroupLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingConstants; 
import javax.swing.*; 
import java.awt.*; 

// Create a simple GUI window 
public class trialdump { 

private static void createWindow() { 

    // Create and set up the window. 
    JFrame frame = new JFrame("PDF Denoiser"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // My edit 
    JPanel panel = new JPanel(); 
    GroupLayout layout = new GroupLayout(panel); 
    panel.setLayout(layout); 

    layout.setAutoCreateGaps(true); 
    layout.setAutoCreateContainerGaps(true); 

    JLabel label1 = new JLabel("Image File"); 
    JLabel label2 = new JLabel("Destination"); 
    JLabel label3 = new JLabel("Preview"); 

    JTextField current = new JTextField(); 
    JTextField dest = new JTextField(); 
    JTextArea preview = new JTextArea(); 

    preview.setEditable(false); 
    JScrollPane previewScrollPane = new JScrollPane(preview); 

    JButton choose1 = new JButton("Search1"); 
    JButton choose2 = new JButton("Search2"); 
    JButton algo1 = new JButton("MDWM"); 
    JButton algo2 = new JButton("BFMR"); 
    JButton algo3 = new JButton("Mine"); 



    // Horizontal arrangement 
    layout.setHorizontalGroup(layout 
      .createSequentialGroup() 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(label1) 
          .addComponent(label2).addComponent(label3)) 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(current) 
          .addComponent(dest).addComponent(preview)) 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(choose1) 
          .addComponent(choose2).addComponent(algo1).addComponent(algo2).addComponent(algo3))); 

    layout.linkSize(SwingConstants.HORIZONTAL, choose1, choose2, algo1, algo2, algo3); 

    // Vertical arrangement 
    layout.setVerticalGroup(layout 
      .createSequentialGroup() 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(label1) 
          .addComponent(current).addComponent(choose1)) 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(label2) 
          .addComponent(dest).addComponent(choose2)) 
      .addGroup(
        layout.createParallelGroup(GroupLayout.Alignment.LEADING) 
          .addComponent(label3) 
          .addComponent(preview) 
          .addGroup(
            layout.createSequentialGroup().addComponent(algo1).addComponent(algo2) 
              .addComponent(algo3)))); 

    // Display the window. 
    frame.setLocationRelativeTo(null); 
    frame.add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 

    createWindow(); 

} 
} 

這裏是我的代碼在listen.java:

package components; 

import java.io.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.SwingUtilities; 
import javax.swing.filechooser.*; 

public class listen extends JPanel implements ActionListener{ 

static private String newline = "\n"; 
private JTextArea log; 
private JFileChooser fc; 

public listen() { 



} 

public void actionPerformed(ActionEvent e) { 
    //Set up the file chooser. 
    if (fc == null) { 
     fc = new JFileChooser(); 

    //Add a custom file filter and disable the default 
    //(Accept All) file filter. 
     fc.addChoosableFileFilter(new imagefilter()); 
     fc.setAcceptAllFileFilterUsed(false); 

    //Add custom icons for file types. 
     fc.setFileView(new imagefileview()); 

    //Add the preview pane. 
     fc.setAccessory(new imagepreview(fc)); 
    } 

    //Show it. 
    int returnVal = fc.showDialog(listen.this, 
            "Attach"); 

    //Process the results. 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     File file = fc.getSelectedFile(); 

    } else { 
     log.append("Attachment cancelled by user." + newline); 
    } 
    log.setCaretPosition(log.getDocument().getLength()); 

    //Reset the file chooser for the next time it's shown. 
    fc.setSelectedFile(null); 
} 

/** 
* Create the GUI and show it. For thread safety, 
* this method should be invoked from the 
* event dispatch thread. 
*/ 


public static void main(String[] args) { 
    //Schedule a job for the event dispatch thread: 
    //creating and showing this application's GUI. 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      //Turn off metal's use of bold fonts 
      UIManager.put("swing.boldMetal", Boolean.FALSE); 

     } 
    }); 
} 
} 
+0

它的可能性。監聽器可以在一個單獨的文件中。 – 2013-04-09 08:31:24

+0

嗨Sudhanshu,你能告訴我一個例子怎麼做嗎?非常感激。 – evarey 2013-04-09 08:32:16

+0

答案是「是」。事實上,在內部課程的前幾天,這是做到這一點的唯一方法......啊,那些日子。只要你想要註冊按鈕的類實現'ActionListener',你就不會有問題。 – MadProgrammer 2013-04-09 08:32:49

回答

2

您可以添加在另一個類中定義的監聽器,像這樣做

JButton choose1 = new JButton("Search1"); 
choose1.addActionListener(new listen()); 

BTW,你應該把你的代碼的一些位的護理:

  • 班組長名稱應首字母大寫爲您的包
  • 鍵入的第一個字母大寫
  • 使用專有名詞
  • 我認爲監聽器類中的主要方法不會使任何有用的東西
  • 根本不需要在監聽器類中從JPanel擴展
  • 儘量避免讓空的構造函數,就像你在listen()中做的那樣。至少調用super(),或者只是,不包含它。
+0

我試過這個,但是有一個錯誤:找不到符號 choose1.addActionListener(new listen()); 箭頭指向listen()。 – evarey 2013-04-10 02:21:16

+0

您是否正在使用像eclipse這樣的IDE來開發或者您正在嘗試使用javac進行編譯?第二種情況是你編譯兩個類:javac * .java。您還必須爲兩個類創建適當的包名和相同的包。 – 2013-04-10 08:45:55

+0

我正在使用JCreator Pro。所以問題是與包?我會再嘗試修改我的代碼。謝謝。 – evarey 2013-04-11 03:13:25

1

只是示例代碼,你可以對類似的變化行-

class Some extends JFrame { 

    private JButton button = new JButton("Something"); 

    Some() { 
     button.addActionListener(new MyListener()); 
    } 
} 

class MyListener implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // do something 
    }  
} 
+0

我有此嘗試,但有一個錯誤:找不到符號 choose1.addActionListener(new listen()); 箭頭指向listen()。 – evarey 2013-04-10 02:24:34

1

這樣做的正確的方法是通過擴展的AbstractAction類中添加所有的動作代碼到它的actionPerformed方法,然後通過它的一個新的實例給JButton's構造函數之一或通過在JButton調用setAction

這裏是一個link幫助清除它全部給你。

相關問題