2011-07-25 27 views
1

,所以我的代碼看起來像這樣的一個部分......如何調用外部方法的Java按鈕(GUI)

public IPGUI() { 
     setTitle("IP Extractor"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 250, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     JPanel panel = new JPanel(); 
     contentPane.add(panel, BorderLayout.CENTER); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     JButton btnConvertDocuments = new JButton("1. Convert Documents"); 
     btnConvertDocuments.setAlignmentX(Component.CENTER_ALIGNMENT); 
     btnConvertDocuments.setMaximumSize(new Dimension(160, 0)); 
     btnConvertDocuments.setPreferredSize(new Dimension(0, 50)); 

     panel.add(btnConvertDocuments); 
     btnConvertDocuments.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //FileConverter fc = new FileConverter(); 
          //Why wont the above method work? 
      } 
     }); 

     JSeparator separator_3 = new JSeparator(); 
     panel.add(separator_3); 

當我按一下按鈕,這是時產生的錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    FileConverter cannot be resolved to a type 
    FileConverter cannot be resolved to a type 

    at IPGUI$2.actionPerformed(IPGUI.java:60) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

所以我實現了監聽器和執行動作的事件,但我不明白爲什麼我不能撥打電話到另一個類的方法?有人能解釋我要去哪裏嗎?預先感謝您的任何意見。

+0

爲什麼它不工作? 什麼是確切的編譯器錯誤?你的代碼段應該可以工作,我沒有FileConverter,但是我可以在內部的ActionListener類中創建任何對象。也許你試圖訪問外部類的變量,這不是最終的? – timaschew

+0

我認爲你編譯錯誤的方式。你做什麼/怎麼做? – timaschew

+0

您能否詳細說明「在另一個班級中調用該方法」?什麼呼叫?什麼方法?什麼級別? – MacGyver

回答

2

看起來你正在使用Java Swing。不要忘記在類簽名的末尾添加「implements ActionListener」。

試試這個:

public class IPGUI extends JFrame implements ActionListener { 

... 

public IPGUI() { 
     setTitle("IP Extractor"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 250, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     JPanel panel = new JPanel(); 
     contentPane.add(panel, BorderLayout.CENTER); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     JButton btnConvertDocuments = new JButton("1. Convert Documents"); 
     btnConvertDocuments.setAlignmentX(Component.CENTER_ALIGNMENT); 
     btnConvertDocuments.setMaximumSize(new Dimension(160, 0)); 
     btnConvertDocuments.setPreferredSize(new Dimension(0, 50)); 

     panel.add(btnConvertDocuments); 
     //btnConvertDocuments.addActionListener(new ActionListener() { 
     // public void actionPerformed(ActionEvent e) { 
     //  //FileConverter fc = new FileConverter(); 
     //     //Why wont the above method work? 
     // } 
     //}); 

     btnConvertDocuments.setActionCommand("x"); 
     btnConvertDocuments.addActionListener(this); 

     JSeparator separator_3 = new JSeparator(); 
     panel.add(separator_3); 
} 

public void actionPerformed(ActionEvent event) { 
    String command = event.getActionCommand(); 
    if (command.equals("x")) { 
     //FileConverter fc = new FileConverter(); 
    } 
} 
... 

} 
+0

我這樣做,但我仍然得到一個編譯器錯誤「FileConverter fc = new FileConverter();」 –

+0

你可以將這個類粘貼到你的問題中嗎?我想看看它的樣子。什麼是堆棧中最重要的錯誤? – MacGyver

+0

根據您的錯誤,您可能沒有引用IPGUI類頂部的庫,或者您沒有在項目中適當引用* .jar文件。所以它不知道這個類是什麼庫。 – MacGyver

1

你是否在導入其他課程?

import FileConverter; 
+0

如果它在同一個項目中,我需要導入該類嗎? –

+0

是的,如果您想在班級中使用其他文件,您必須使用「導入」關鍵字。如果它在同一個包中,則只需使用:import CourClassName; 否則您使用:mypackagename.anotherpackage.YourClass; – HectorLector

1

檢查,如果在文件的開頭你碰到這樣的

import bla.bla.FileConverter; 

如果不是你需要添加它,並確保FileConverter類的實現是在車廂通票。用它來添加一個jar到項目的類路徑你使用的是什麼IDE

+0

如果它在同一個項目中,我是否必須導入該類? –

+0

是的,除非它在同一個包中。作爲一個經驗法則總是進口。並且確保在單獨的.java文件中定義的所有類都應該公開,除非您真的知道自己在做什麼。建議:使用一些Java IDE並不是必須的,但是可以節省時間和精力。例如Eclipse有Ctrl + Shift + O,可以導入清理和修復添加那些缺失並可以自動確定的項目,或者在有多個選項的情況下詢問您等非常方便。 –

0

什麼是地獄? Eclipse讓我感到困惑。我試圖在這裏遵循每個人的建議,但沒有奏效。但是當我去重新啓動Eclipse時......一切正常。

奇怪:/

感謝大家的輸入不過,我真的很感激!

相關問題