Problem:
Create java gui app that allows the user to pick picture
and text files only and displays them respectively.
and text files only and displays them respectively.
Solution:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.filechooser.FileFilter;
public class JFileChooserapp extends JFrame {
private JMenuBar bar;
private JMenu fileMenu;
private JMenuItem openMenuItem;
private JEditorPane contentArea;
private JScrollPane scrollPane;
private File selectedFile;
private String[] okExtensions = {"png", "gif", "tiff", "jpg", "txt"};
public JFileChooserapp() {
super("JFileChooser Demo");
bar = new JMenuBar();
setJMenuBar(bar);
fileMenu = new JMenu("File");
fileMenu.setMnemonic('f');
openMenuItem = new JMenuItem("Open");
openMenuItem.setMnemonic('o');
openMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
selectedFile = getFile();
if(selectedFile !=null)
displayFile(selectedFile);
}
});
fileMenu.add(openMenuItem);
bar.add(fileMenu);
setJMenuBar(bar);
contentArea = new JEditorPane();
contentArea.setEditable(false);
scrollPane = new JScrollPane(contentArea);
Container contentPane = getContentPane();
contentPane.add(scrollPane);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
}
private File getFile() {
File output = null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
String description = "";
for (String ext : okExtensions)
description += "*." + ext + " ";
return description;
}
@Override
public boolean accept(File f) {
for(String ext: okExtensions)
if (f.getName().toLowerCase().endsWith(ext))
return true;
return false;
}
});
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
output = fileChooser.getSelectedFile();
if ( output == null || !output.exists()) output = null;
}
return output;
}
private void displayFile(File file) {
String fileName = file.getName();
int lastIndexOfDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastIndexOfDot+1);
boolean isImage = true;
if (extension.equalsIgnoreCase("txt")) isImage= false;
URL fileUrl = null;
try {
fileUrl = file.toURI().toURL();
} catch (MalformedURLException e) {
return;
}
if (isImage) {
contentArea.setContentType("text/html");
contentArea.setText("<html><title>Image</title><img src=" +
fileUrl + " /></html>");
} else {
try {
contentArea.setContentType("text/plain");
contentArea.setPage(fileUrl);
} catch (IOException e) {
return;
}
}
}
public static void main(String[] args) {
JFileChooserapp demo = new JFileChooserapp();
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
There is no output in this post.
ReplyDelete