JFileChooser 作为 JInternalFrame
JFileChooser as JInternalFrame
我正在构建一个 java 程序,您应该可以在其中 select 一个文件。对话框应作为 JInternalFrame 弹出,不应是自己的 window。我的进步:
JFileChooser chooser = new JFileChooser();
JInternalFrame fr = new JInternalFrame("Öffnen", true, // resizable
false, // closable
true, // maximizable
true);// iconifiable);
fr.add(chooser);
fr.setSize(300, 600);
fr.setVisible(true);
JOS.mainWindow.jdpDesktop.add(fr);
chooser.setVisible(true);
chooser.setSize(300, 600);
chooser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fr.setVisible(false);
JOS.mainWindow.jdpDesktop.remove(fr);
}
});
如果我按下关闭按钮,它会关闭,但如果用户按下 "open",我不会收到事件。我可以使用任何 ActionListener 吗?还有什么办法呢?
谢谢!
-雅各布
JFileChooser
只是一个组件,它有一个方便的方法,允许您在对话框中显示它
您可以使用 JOptionPane.showInternalOptionDialog
来显示 JFileChooser
,它将像模态对话框一样运行,但包裹在 JInternalFrame
中,例如...
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JDesktopPane dp = new JDesktopPane();
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(dp);
frame.setSize(800, 800);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JFileChooser chooser = new JFileChooser();
chooser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JInternalFrame parent = (JInternalFrame) SwingUtilities.getAncestorOfClass(JInternalFrame.class, chooser);
if (JFileChooser.CANCEL_SELECTION.equals(e.getActionCommand())) {
// Dialog was canceled
} else if (JFileChooser.APPROVE_SELECTION.equals(e.getActionCommand())) {
// Dialog was "approved"
}
parent.dispose();
}
});
JOptionPane.showInternalOptionDialog(dp, chooser, "Choose", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new Object[0], null);
}
});
}
}
我正在构建一个 java 程序,您应该可以在其中 select 一个文件。对话框应作为 JInternalFrame 弹出,不应是自己的 window。我的进步:
JFileChooser chooser = new JFileChooser();
JInternalFrame fr = new JInternalFrame("Öffnen", true, // resizable
false, // closable
true, // maximizable
true);// iconifiable);
fr.add(chooser);
fr.setSize(300, 600);
fr.setVisible(true);
JOS.mainWindow.jdpDesktop.add(fr);
chooser.setVisible(true);
chooser.setSize(300, 600);
chooser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fr.setVisible(false);
JOS.mainWindow.jdpDesktop.remove(fr);
}
});
如果我按下关闭按钮,它会关闭,但如果用户按下 "open",我不会收到事件。我可以使用任何 ActionListener 吗?还有什么办法呢? 谢谢! -雅各布
JFileChooser
只是一个组件,它有一个方便的方法,允许您在对话框中显示它
您可以使用 JOptionPane.showInternalOptionDialog
来显示 JFileChooser
,它将像模态对话框一样运行,但包裹在 JInternalFrame
中,例如...
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JDesktopPane dp = new JDesktopPane();
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(dp);
frame.setSize(800, 800);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JFileChooser chooser = new JFileChooser();
chooser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JInternalFrame parent = (JInternalFrame) SwingUtilities.getAncestorOfClass(JInternalFrame.class, chooser);
if (JFileChooser.CANCEL_SELECTION.equals(e.getActionCommand())) {
// Dialog was canceled
} else if (JFileChooser.APPROVE_SELECTION.equals(e.getActionCommand())) {
// Dialog was "approved"
}
parent.dispose();
}
});
JOptionPane.showInternalOptionDialog(dp, chooser, "Choose", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new Object[0], null);
}
});
}
}