Re: wants more options in choosing the name and type of image
bH wrote:
...
My code example:
OK - that was something I could work with.
Here is my version. The details are in the
comments.
<sscce>
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import javax.swing.border.BevelBorder;
import java.io.File;
import java.net.*;
public class ImageOnPanel
extends JPanel {
private static final String title = "Image On Panel";
private static final int width = 510;
private static final int height = 330;
String imageName;
Image myImage;
// Constructor
public ImageOnPanel(String name) {
imageName = name;
// what was the second panel for?
// I removed it, and added the border in the main..
// this.setLayout(new BorderLayout());
// imagePanel = new JPanel() {
// MOVED paintComponent method to ImageOnPanel class
// };
// this.add(imagePanel, BorderLayout.CENTER);
// added this border stuff in 8/06/04
// <rant>I hate these String based forms of methods or
// classes treating the String as a File/URL - if the
// method needs a damned File or URL - it should
// accept only objects of those flavors</rant>
// myImage = Toolkit.getDefaultToolkit().getImage(imageName);
File imageFile = new File(imageName);
System.out.println( "imageFile: " +imageFile.exists());
try {
myImage = Toolkit.
getDefaultToolkit().
getImage( imageFile.toURI().toURL() );
// some components implememnt a MediaTracker
// for you - but we imlement our own, for the
// custom painting..
MediaTracker mt = new MediaTracker(this);
mt.addImage(myImage, 0);
try {
mt.waitForAll();
} catch(InterruptedException e) {
//wake and continue
}
} catch(MalformedURLException e) {
JOptionPane.showMessageDialog(this, "Problem loading image!");
}
}
/** Why did you make this 'protected' access? */
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(myImage, 0, 0, Color.white,this);
}
public static void main(String[] args) throws Exception {
String name = null;
JFrame myFrame = new JFrame(title);
if (args.length==0) {
// *JFileChooser* is the actual answer to your question,
// ..as far as I recall the question!
JFileChooser jfc = new JFileChooser();
while ( JFileChooser.APPROVE_OPTION != jfc.showOpenDialog(myFrame) ) {
}
java.io.File f = jfc.getSelectedFile();
name = f.getCanonicalPath();
} else {
name = args[0];
}
System.out.println( name );
JPanel border = new JPanel(new BorderLayout());
BevelBorder loweredBevelBorder =
(BevelBorder)BorderFactory.createLoweredBevelBorder();
border.setBorder(loweredBevelBorder);
myFrame.getContentPane().add(
new ImageOnPanel(name),
BorderLayout.CENTER);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setSize(new Dimension(width, height));
myFrame.setVisible(true);
}
}
</sscce>
HTH
--
Andrew Thompson
http://www.athompson.info/andrew/
Message posted via JavaKB.com
http://www.javakb.com/Uwe/Forums.aspx/java-setup/200706/1