gpt4 book ai didi

java - 如何在非组件类中使用 JFileChooser.showOpenDialog()?

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:50 27 4
gpt4 key购买 nike

我有一个包含 JMenuBar 的 Java GUI 项目,我刚刚添加了一个 JToolBar。在以前的版本中,事件是在扩展 JMenuBar 的同一个类中实现的。我发现它很蹩脚,并将事件移动到另一个扩展 AbstractAction 的类中。我的目标是集中所有常见事件,使它们对不同的来源(JMenuBar、JToolBar 等)使用react。但是,我对 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;
}

我收到以下错误:

The method showOpenDialog(component) in the type JFileChooser is not applicable for the arguments (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]);

每个项目都与 Action 名称、图标和合适的事件相关联!

有什么想法吗?

谢谢!

最佳答案

通常,传递给 JDialogs 的父类是应用程序的主要 JFrame。除其他外,这允许对话框在应用程序的窗口上居中。

希望您的操作类能够访问主框架并传递对它的引用。实现此目的的一种方法可能是将主框架作为参数传递给 ActionUsuels 构造函数。

否则,null 也是一个有效的父规范。给定 null,对话框位于屏幕中央,但无论如何通常都可以正常工作。

好机会! :)

关于java - 如何在非组件类中使用 JFileChooser.showOpenDialog()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1974807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com