我有一個包含JMenuBar的Java GUI項目,我只是添加了一個JToolBar。在以前的版本中,事件是在擴展JMenuBar的同一類中實現的。我發現它跛腳並將事件移到擴展AbstractAction的另一個類中。我的目標是集中所有常見事件,以使它們對不同來源(JMenuBar,JToolBar等)作出反應。但是,我遇到了JFileChooser.showOpenDialog()方法的問題。此方法將對話框的父組件作爲參數。 如果我這樣做:如何在非組件類中使用JFileChooser.showOpenDialog()?
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.event.*;
public class ActionUsuels extends AbstractAction
{
private String nameAction;
/** Instance de MyFileChooser pour explorer les dossiers/fichiers*/
private MyFileChooser fc;
/** Instance d'OpenSave qui contient les algorithmes d'ouverture/sauvegarde*/
private OpenSave openSave;
ActionUsuels(String inName, String inPathIcon)
{
nameAction = inName;
putValue(Action.NAME, inName);
putValue(Action.SMALL_ICON, new ImageIcon(inPathIcon));
putValue(Action.SHORT_DESCRIPTION, inName);
this.fc = new MyFileChooser();
this.openSave = new OpenSave(Panneau.getUnivers());
}
public void actionPerformed(ActionEvent e)
{
// Evénement nouveau projet
if(nameAction == "OPEN_PROJECT")
{
fc.ContMode();
fc.refresh();
int returnVal = fc.showOpenDialog(ActionUsuels.this);
if (returnVal == MyFileChooser.APPROVE_OPTION)
{
File file = fc.getSelectedFile();
openSave.OpenCont(file);
}
}
static ActionUsuels actionInactive;
}
我得到以下錯誤:
的方法showOpenDialog(組件) 在JFileChooser的類型不 適用於參數 (ActionUsuels)。
我想這是正常的,因爲ActionUsuels沒有擴展任何JComponent類。但是我怎麼能立交呢?我正在嘗試做一個壞習慣嗎?我的意圖是寫一次事件,並能夠從任何組件調用它們。
只是爲了讓你明白我在做什麼,我有這樣的菜單類:
actions = new ActionUsuels[nameActions.length];
for(int i = 0; i < nameActions.length; i++)
{
actions[i] = new ActionUsuels(nameActions[i], pathIcons[i]);
}
file_menu.add(actions[0]);
file_menu.addSeparator();
file_menu.add(actions[1]);
每個項目相關聯的動作,圖標和適當事件的名稱!
有什麼想法?
謝謝!
非常感謝你,它工作得很好:) – 2009-12-29 14:19:36