我正在尝试编写一个小文本编辑器,我正在构建GUI。
我添加了JMenu
并为其添加了JMenuItem
。我给了菜单项“打开”的值。
原因是因为我希望当按下“打开”时,屏幕上会出现JFileChooser
这就是我所拥有的:
public void mousePressed(MouseEvent me) {
JFileChooser fs = new JFileChooser();
}
此方法位于名为listener的类中,该类实现MouseListener
。这是我坚持的一步。
getContentPane()
..不起作用:
我接近这个方式是不是很好的代码练习?有没有更好的办法?如果不是我该怎么做呢?
答案 0 :(得分:2)
虽然一般来说您的方法可行,但您可能需要查看Actions的Swing概念。 JMenuItem直接支持动作,你不需要一个MouseListener(对你的用例来说有点低级)。
试着看一下这些例子,一开始看起来有点压倒性,但最后它是一个很好的,干净的封装你想要的东西。它是可重用的,这意味着您可以在不同的菜单(也许是上下文菜单)上使用该操作。
对于您的代码,您错过了对fs.showOpenDialog(component)
的调用。
答案 1 :(得分:1)
首先,不要对MouseListener
或JMenuItem
使用JButton
,这不是管理这些组件的适当方法,而是使用ActionListener
。< / p>
主要原因是您的菜单项可以通过键盘快捷键或以编程方式触发。
其次“不起作用”不是关于你的问题的信息,但我认为这是因为该方法不存在。
一个简单的解决方案是检查事件的来源以确定它是否为Component
并使用它而不是null
如果事件的来源不是Component
} ...
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
Component parent = null;
if (source instanceof Component) {
parent = (Component)source;
}
// Show file chooser dialog...
}
请查看How to use menus了解详情
您可能还会发现某些感兴趣的How to use actions
答案 2 :(得分:0)
查看JFileChooser类上的Javadoc。它有一个如何打开它的例子。
以下代码会弹出用户主目录的文件选择器,该目录只能看到.jpg和.gif图像:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}