我有一个包含 JMenuBar 的 Java GUI 项目,我刚刚添加了一个 JToolBar。在以前的版本中,事件是在扩展 JMenuBar 的同一类中实现的。我发现它很蹩脚,并将事件移到另一个扩展 AbstractAction 的类中。我的目标是集中所有常见事件,使它们对不同的来源(JMenuBar、JToolBar 等)做出反应。但是,我对 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;
}
我收到以下错误:
JFileChooser 类型中的方法 showOpenDialog(component) 不适用于参数 (ActionUsuels)。
我想这是正常的,因为 ActionUsuels 没有扩展任何 JComponent 类。但我怎么能超越呢?我正在尝试做的事情是不好的做法吗?我的意图是编写一次事件并能够从任何组件调用它们。
只是为了让您了解我在做什么,我在 Menu 类中有这个:
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]);
每个项目都与动作的名称、图标和合适的事件相关联!
任何的想法 ?
谢谢 !