我怎么能不先显示打开的对话框?
How can I not show the open dialog first?
嗯,我遇到的唯一问题是首先显示打开的对话框。我想要的是只将它放在 JFrame
内,然后在 JFrame
内做其余的事情,比如打开图像并显示它。 It should be like this
问题是我的 JFileChooser
先显示了。而且我希望所有内容都在 JFrame 中,就像显示的图像中一样。
这是我的代码:
import java.awt.Image;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.border.*;
import java.awt.Color;
import java.awt.Dimension;
public class imgviewer extends JFrame{
JButton button;
JLabel label;
public imgviewer() {
super("Image viewer");
label = new JLabel();
label.setBounds(400, 10, 180, 300);
Border b = BorderFactory.createLineBorder(Color.ORANGE, 2);
JFileChooser file = new JFileChooser(".");
label.setBorder(b);
add(label);
file.setPreferredSize(new Dimension(400, 300));
file.setCurrentDirectory(new File(System.getProperty("user.home")));
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg", "png", "gif");
file.addChoosableFileFilter(filter);
int result = file.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = file.getSelectedFile();
String path = selectedFile.getAbsolutePath();
label.setIcon(ResizeImage(path));
}
else if (result == JFileChooser.CANCEL_OPTION) {
System.out.println("No File Selected");
}
add(file);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(600, 350);
setVisible(true);
}
public ImageIcon ResizeImage(String ImagePath) {
ImageIcon MyImage = new ImageIcon(ImagePath);
Image img = MyImage.getImage();
Image newImg = img.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(newImg);
return image;
}
public static void main(String[] args) {
new imgviewer();
}
}
我不确定如何做你想做的事,但是你把行 int result = file.showOpenDialog(null);
放到你的代码中,那一行明确表示“现在在它自己的文件对话框中打开这个 JFileChooser ”。按照您的代码顺序,这显然发生在 setVisible(true)
行之前,该行将打开您希望放置在文件对话框周围的包装器。
file.addChoosableFileFilter(filter);
之后和 add(file)
之前的代码缩进是否有原因?如果您认为此代码位于一个单独的块中,这将阻止它在以后执行,但事实并非如此。
我已经很长时间没有使用 JFileChooser
或一般的 Swing,所以我不知道如果将 JFileChooser
视为单独的组件嵌入到另一个组件中,但如果这完全有效,你绝对不能使用 JFileChooser
的 showOpenDialog
方法。
嗯,我遇到的唯一问题是首先显示打开的对话框。我想要的是只将它放在 JFrame
内,然后在 JFrame
内做其余的事情,比如打开图像并显示它。 It should be like this
问题是我的 JFileChooser
先显示了。而且我希望所有内容都在 JFrame 中,就像显示的图像中一样。
这是我的代码:
import java.awt.Image;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.border.*;
import java.awt.Color;
import java.awt.Dimension;
public class imgviewer extends JFrame{
JButton button;
JLabel label;
public imgviewer() {
super("Image viewer");
label = new JLabel();
label.setBounds(400, 10, 180, 300);
Border b = BorderFactory.createLineBorder(Color.ORANGE, 2);
JFileChooser file = new JFileChooser(".");
label.setBorder(b);
add(label);
file.setPreferredSize(new Dimension(400, 300));
file.setCurrentDirectory(new File(System.getProperty("user.home")));
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.Images", "jpg", "png", "gif");
file.addChoosableFileFilter(filter);
int result = file.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = file.getSelectedFile();
String path = selectedFile.getAbsolutePath();
label.setIcon(ResizeImage(path));
}
else if (result == JFileChooser.CANCEL_OPTION) {
System.out.println("No File Selected");
}
add(file);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(600, 350);
setVisible(true);
}
public ImageIcon ResizeImage(String ImagePath) {
ImageIcon MyImage = new ImageIcon(ImagePath);
Image img = MyImage.getImage();
Image newImg = img.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(newImg);
return image;
}
public static void main(String[] args) {
new imgviewer();
}
}
我不确定如何做你想做的事,但是你把行 int result = file.showOpenDialog(null);
放到你的代码中,那一行明确表示“现在在它自己的文件对话框中打开这个 JFileChooser ”。按照您的代码顺序,这显然发生在 setVisible(true)
行之前,该行将打开您希望放置在文件对话框周围的包装器。
file.addChoosableFileFilter(filter);
之后和 add(file)
之前的代码缩进是否有原因?如果您认为此代码位于一个单独的块中,这将阻止它在以后执行,但事实并非如此。
我已经很长时间没有使用 JFileChooser
或一般的 Swing,所以我不知道如果将 JFileChooser
视为单独的组件嵌入到另一个组件中,但如果这完全有效,你绝对不能使用 JFileChooser
的 showOpenDialog
方法。