JMenuBarを含むJavaGUIプロジェクトがあり、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クラスを拡張しないため、これは正常だと思います。しかし、どうすればそれを超えることができますか?私がやろうとしていることは悪い習慣ですか?私の意図は、イベントを1回記述して、任意のコンポーネントから呼び出すことができるようにすることです。
私がしていることをあなたに理解させるために、私はこれを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]);
すべてのアイテムは、アクションの名前、アイコン、および適切なイベントに関連付けられています。
何か案が ?
ありがとう !