Reputation: 1081
I am trying to make an Image Editor in Java and I need the image to display from a GUI. I am trying to pick the file from a JFileChooser and display that in a JPanel inside a JFrame. I am having trouble getting the file from the JFileChooser and also getting the image to display. I really need help with these two things.
Here is my main class(ImagePanel):
import java.awt.Dimension;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.Color;
import javax.swing.JPanel;
import java.awt.BorderLayout;
public class ImagePanel extends JFrame {
public ImagePanel( String name) {
String nme= name;
FileChooserDemo a = new FileChooserDemo();
ImagePanel2 img = new ImagePanel2("hockey.jpg");
add(img);
add(a);
System.out.println(getFile());
}
public static void main (String[]args) {
ImagePanel x = new ImagePanel ("Image Deluxe");
x.setBounds(100, 100, 300, 200);
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x.setVisible(true);
}
}
Here is my second class(ImagePanel2):
import java.awt.Dimension;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.Color;
import javax.swing.JPanel;
import java.util.Scanner;
public class ImagePanel2 extends JPanel {
private ImageIcon image;
public ImagePanel2(String imageFileName) {
image = new ImageIcon(imageFileName);
}
public void paintComponent(Graphics g) {
int x = 5, y = 10;
if (image != null)
image.paintIcon(this, g, x, y);
else
System.out.println("Image File not found");
}
public static void main(String[] argv) {
// Scanner keyboard = new Scanner(System.in);
// System.out.print("Enter the name of the File: ");
// String fileName=keyboard.next();
JPanel canvas2 = new ImagePanel2("hockey.jpg");
JFrame window= new JFrame("Images");
window.setBounds(100, 100, 300, 200);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas2.setBackground(Color.WHITE);
window.getContentPane().add(canvas2);
window.setVisible(true);
}
}
And here is the class for the JFileChooser(FileChooserDemo copied from the Java website):
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.*;
/*
* FileChooserDemo.java uses these files:
* images/Open16.gif
* images/Save16.gif
*/
public class FileChooserDemo extends JPanel
implements ActionListener {
public File testFile;
static private final String newline = "\n";
JButton openButton, saveButton;
JTextArea log;
JFileChooser fc;
public FileChooserDemo() {
super(new BorderLayout());
//Create the log first, because the action listeners
//need to refer to it.
//log = new JTextArea(5,20);
//log.setMargin(new Insets(5,5,5,5));
//log.setEditable(false);
//JScrollPane logScrollPane = new JScrollPane(log);
//Create a file chooser
fc = new JFileChooser();
//Uncomment one of the following lines to try a different
//file selection mode. The first allows just directories
//to be selected (and, at least in the Java look and feel,
//shown). The second allows both files and directories
//to be selected. If you leave these lines commented out,
//then the default mode (FILES_ONLY) will be used.
//
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
//Create the open button. We use the image from the JLF
//Graphics Repository (but we extracted it from the jar).
openButton = new JButton("Open a File...",
createImageIcon("images/Open16.gif"));
openButton.addActionListener(this);
//Create the save button. We use the image from the JLF
//Graphics Repository (but we extracted it from the jar).
saveButton = new JButton("Save a File...",
createImageIcon("images/Save16.gif"));
saveButton.addActionListener(this);
//For layout purposes, put the buttons in a separate panel
JPanel buttonPanel = new JPanel(); //use FlowLayout
buttonPanel.add(openButton);
buttonPanel.add(saveButton);
//Add the buttons and the log to this panel.
add(buttonPanel, BorderLayout.PAGE_START);
//add(logScrollPane, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
//Handle open button action.
if (e.getSource() == openButton) {
int returnVal = fc.showOpenDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
testFile = fc.getSelectedFile();
//This is where a real application would open the file.
//log.append("Opening: " + file.getName() + "." + newline);
} else {
//log.append("Open command cancelled by user." + newline);
}
//log.setCaretPosition(log.getDocument().getLength());
//Handle save button action.
} else if (e.getSource() == saveButton) {
int returnVal = fc.showSaveDialog(FileChooserDemo.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would save the file.
//log.append("Saving: " + file.getName() + "." + newline);
} else {
//log.append("Save command cancelled by user." + newline);
}
log.setCaretPosition(log.getDocument().getLength());
}
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = FileChooserDemo.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FileChooserDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add content to the window.
frame.add(new FileChooserDemo());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public File getFile() {
return testFile;
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
I have the method getFile() public in FileChooserDemo and I am trying to use that in ImagePanel to access the file name that the FileChooser selects but the ImagePanel does not recognize the getFile() method. Any help would be appreciated. Thanks.
Upvotes: 0
Views: 162
Reputation: 2070
In ImagePanel
replace
System.out.println(getFile());
with
System.out.println(a.getFile());
Upvotes: 0