Re: How do you set an Icon into a JButton?



On Mar 22, 12:14 pm, Ian Wilson <scoblo...@xxxxxxxxxxxxx> wrote:
Phil Powell wrote:
I thought my method would handle this dynamically, but I was way off:

[code]
/**
* Handle {@link javax.swing.JButton}
* @param button {@link javax.swing.JButton}
*/
private void handleButton(JButton button) {
try {
String text = button.getText();
ImageIcon icon = new ImageIcon(

System.getProperty("com.ppowell.applications.globals.rockpaperscissorsglobals.SRC_PATH")
+

FileFunctionality.buildFilePath(RockPaperScissorsGlobals.IMAGE_PATH_ARRAY,
true) /* EXCLUDE 1 BACKSLASH */ +
File.separator +
button.getText().toLowerCase().trim() +
".ico");
button = new JButton(text, icon);

After this statement, button is no longer "pointing at" (a reference to)
the button displayed on your panel. From here on you are manipulating a
completely separate and invisible button (invisible because it hasn't
been added to any visible component).

Replace the above line with
button.setText(text);
button.setIcon(icon);
(Untested - I've no idea if these are the appropriate methods)


Thanx! Here is the fixed method:

/**
* Handle {@link javax.swing.JButton}
* @param button {@link javax.swing.JButton}
*/
private void handleButton(JButton button) {
try {
ImageIcon icon = IconHandler.createImageIcon(

System.getProperty("com.ppowell.applications.globals.rockpaperscissorsglobals.FILE_SRC_PATH")
+

FileFunctionality.buildFilePath(RockPaperScissorsGlobals.IMAGE_PATH_ARRAY) /
* EXCLUDE 1 BACKSLASH */ +
File.separator +
button.getText().toLowerCase().trim() +
"." +

System.getProperty("com.ppowell.applications.globals.rockpaperscissorsglobals."
+
button.getText() + "_ICON_EXT"));
icon = IconHandler.scaleImageIcon(icon, 16, 16);
button.setIcon(icon);
Dimension dim = new Dimension(icon.getIconWidth(),
icon.getIconHeight());
button.setSize(dim);
button.setPreferredSize(dim);
button.setMaximumSize(dim);
} catch (Exception e) {
e.printStackTrace();
}
button.setFocusable(false);
button.setSelected(false);
button.addActionListener(RockPaperScissors.this);
button.setMnemonic(button.getText().charAt(0));
button.setFont(RockPaperScissorsGlobals.FONT);
}


The problem resulted in my attempt to set an .ico file as Icon, and
apparently that is not possible in Java as ".ico" is not recognized as
a legitimate image. Switching to a JPEG image instead was just fine.

Dimension dim = new Dimension(icon.getIconWidth(),
icon.getIconHeight());
button.setSize(dim);
button.setPreferredSize(dim);
button.setMaximumSize(dim);
} catch (Exception e) {
e.printStackTrace();
}
button.setFocusable(false);
button.setSelected(false);
button.addActionListener(RockPaperScissors.this);
button.setMnemonic(button.getText().charAt(0));
button.setFont(RockPaperScissorsGlobals.FONT);
}
[/code]

Instead I see JButtons with no icons, looking dead normal, and worse,
setFocusable(false) is ignored; the JButtons look like they've been
clicked!

What did I do so wrong this time?
Thanx
Phil


.


Quantcast