import javax.swing.*;
import java.awt.*;
public class Main
{
public static void main(String[] args)
{
//load the card image from the gif file.
final ImageIcon cardIcon = new ImageIcon("cardimages/tenClubs.gif");
//create a panel displaying the card image
JPanel panel = new JPanel()
{
//paintComponent is called automatically by the JRE whenever
//the panel needs to be drawn or redrawn
public void paintComponent(Graphics g) {
super.paintComponent(g);
cardIcon.paintIcon(this, g, 20, 20);
}
};
//create & make visible a JFrame to contain the panel
JFrame window = new JFrame("Title goes here");
window.add(panel);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBackground(new Color(100, 200, 102));
window.setPreferredSize(new Dimension(200,200));
window.pack();
window.setVisible(true);
}
}
I am trying to make a java project that will display all 52 cards on a window. I have the window working but I cant get a card to appear on the window.
I am using eclipse for OSX, inside the project src file I have a (default package) container with my Main.java file. Then I have my cardimages folder in the same src file.
How can I get the image to show in the window?
You should try to get the image as a URL, as a resource again using the Class method getResource(...). For example, test this:
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class DefaultFoo {
public static void main(String[] args) throws IOException {
String resource = "/cardimages/tenClubs.gif";
URL url = Class.class.getResource(resource);
BufferedImage img = ImageIO.read(url);
Icon icon = new ImageIcon(img);
JOptionPane.showMessageDialog(null, icon);
}
}
Also, don't use the default package like you're doing. Put your class into a valid package.
Then try something like this:
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
#SuppressWarnings("serial")
public class PlayWithImages extends JLayeredPane {
private static final String RESOURCE = "/cardimages/tenClubs.gif";
private static final int PREF_W = 500;
private static final int PREF_H = PREF_W;
private static final int CARD_COUNT = 8;
public PlayWithImages() throws IOException {
URL url = getClass().getResource(RESOURCE);
BufferedImage img = ImageIO.read(url);
Icon icon = new ImageIcon(img);
for (int i = 0; i < CARD_COUNT; i++) {
JLabel label = new JLabel(icon);
label.setSize(label.getPreferredSize());
int x = PREF_W - 20 - i * 40 - label.getWidth();
int y = 20;
label.setLocation(x, y);
add(label);
}
}
#Override
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
PlayWithImages mainPanel = null;
try {
mainPanel = new PlayWithImages();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
JFrame frame = new JFrame("PlayWithImages");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Related
I tried to add an image to my window and make it the same size as the window but the project won't run and no image comes up, when I had the image working before it wouldn't be the size of the screen even thought I used WIDTH and HEIGHT which is what I used for the window.
import javax.swing.*;
public class Main {
public static int WIDTH = 1000;
public static int HEIGHT = 368;
public static JFrame window = new JFrame();
public static void main(String[] args) {
CreateWindow();
}
public static void CreateWindow() {
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
window.setSize(WIDTH, HEIGHT);
BackgroundImage();
window.setVisible(true);
}
public static void BackgroundImage() {
ImageIcon image = new ImageIcon("C:\\Users\\SamBr\\Pictures\\image.png");
window.add(image)
image.setSize(WIDTH, HEIGHT);
}
}
Use JLabel to show your image and with getScaledInstance() method you can resize it.
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
public class Main {
public static int WIDTH = 1000;
public static int HEIGHT = 368;
public static JFrame window = new JFrame();
public static void main(String[] args) {
CreateWindow();
}
public static void CreateWindow() {
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
window.setSize(WIDTH, HEIGHT);
BackgroundImage();
window.pack();
window.setVisible(true);
}
public static void BackgroundImage() {
ImageIcon imageIcon = new ImageIcon("C:\\Users\\SamBr\\Pictures\\image.png");
ImageIcon scaledImage = new ImageIcon(
imageIcon.getImage().getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH));
JLabel label = new JLabel();
label.setIcon(scaledImage);
window.add(label);
}
}
I am creating a JFrame, and when the window is expanded I want the content to stay centered, instead of staying the same distance away from the side. I am using WindowBuilder on Eclipse.
Is there a quick way to do this?
One way, have the container use a GridBagLayout and add the single content to the container without constraints.
For example:
import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class CenteredContent extends JPanel {
public static final String IMG_PATH = "https://duke.kenai.com/iconSized/duke.gif";
public CenteredContent() throws IOException {
URL imgUrl = new URL(IMG_PATH);
BufferedImage img = ImageIO.read(imgUrl);
Icon imgIcon = new ImageIcon(img);
JLabel label = new JLabel(imgIcon);
setLayout(new GridBagLayout());
add(label);
}
private static void createAndShowGui() {
CenteredContent mainPanel = null;
try {
mainPanel = new CenteredContent();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
JFrame frame = new JFrame("CenteredContent");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
I am currently having a problem with JFrame and Images. This program uses an Applet then adds it to a JFrame in a different class, so it can be ran as either an Applet or an Application. Currently, the frame holds only a handful of images, and no components. I recently attempted to add a JTextField using absolute positioning (LayoutManger is null) and it works fine, except all the images are removed, leaving me with just a JTextField. Why is this happening? How can I fix it? My code is posted below. Thanks!
The Main Class (Creates the Applet and Images):
package net.xenix.src;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.Timer;
public class XenixMain extends JApplet implements ActionListener
{
private static final long serialVersionUID = 1L;
private static int pixelSize = 2;
public static Dimension size = new Dimension(1600, 900);
public static Dimension pixel = new Dimension(size.width / pixelSize, size.height / pixelSize);
public static String name = "Xenix";
public static final int WIDTH = 1600;
public static final int HEIGHT = 900;
//Finding player Windows name
static String username = System.getProperty("user.name");
public static int secondsCount = 0;
//Shortcut to image directory
public static String imagePath = "C:\\Users\\" + username + "\\Desktop\\Xenix Dev\\Xenix\\resources\\graphics\\";
private static PaintSurface canvas;
public static ImageIcon XenixBackgroundIcon = new ImageIcon(imagePath + "XenixBackground.png");
public static Image XenixBackground = XenixBackgroundIcon.getImage();
public static ImageIcon XenixLogoIcon = new ImageIcon(imagePath + "XenixLogo.png");
public static Image XenixLogo = XenixLogoIcon.getImage();
public static ImageIcon HeartContainerFullIcon = new ImageIcon(imagePath + "HeartContainerFull.png");
public static Image HeartContainerFull = HeartContainerFullIcon.getImage();
public static ImageIcon HeartContainer9Icon = new ImageIcon(imagePath + "HeartContainer9.png");
public static Image HeartContainer9 = HeartContainer9Icon.getImage();
public static ImageIcon HeartContainer8Icon = new ImageIcon(imagePath + "HeartContainer8.png");
public static Image HeartContainer8 = HeartContainer8Icon.getImage();
public static ImageIcon HeartContainer7Icon = new ImageIcon(imagePath + "HeartContainer7.png");
public static Image HeartContainer7 = HeartContainer7Icon.getImage();
public static ImageIcon HeartContainer6Icon = new ImageIcon(imagePath + "HeartContainer6.png");
public static Image HeartContainer6 = HeartContainer6Icon.getImage();
public static ImageIcon HeartContainer5Icon = new ImageIcon(imagePath + "HeartContainer5.png");
public static Image HeartContainer5 = HeartContainer5Icon.getImage();
public static ImageIcon HeartContainer4Icon = new ImageIcon(imagePath + "HeartContainer4.png");
public static Image HeartContainer4 = HeartContainer4Icon.getImage();
public static ImageIcon HeartContainer3Icon = new ImageIcon(imagePath + "HeartContainer3.png");
public static Image HeartContainer3 = HeartContainer3Icon.getImage();
public static ImageIcon HeartContainer2Icon = new ImageIcon(imagePath + "HeartContainer2.png");
public static Image HeartContainer2 = HeartContainer2Icon.getImage();
public static ImageIcon HeartContainer1Icon = new ImageIcon(imagePath + "HeartContainer1.png");
public static Image HeartContainer1 = HeartContainer1Icon.getImage();
public static ImageIcon HeartContainerDepletedIcon = new ImageIcon(imagePath + "HeartContainerDepleted.png");
public static Image HeartContainerDepleted = HeartContainerDepletedIcon.getImage();
public static ImageIcon HealthTextIcon = new ImageIcon(imagePath + "HealthText.png");
public static Image HealthText = HealthTextIcon.getImage();
public static ImageIcon ForwardSlashIcon = new ImageIcon(imagePath + "ForwardSlash.png");
public static Image ForwardSlash = ForwardSlashIcon.getImage();
public Timer timer = new Timer(1000, this);
public void start()
{
timer.setInitialDelay(0);
timer.start();
}
public void stop()
{
timer.stop();
}
public void actionPerformed(ActionEvent e)
{
secondsCount++;
System.out.println(secondsCount);
}
public void init()
{
this.setSize(WIDTH, HEIGHT);
canvas = new PaintSurface();
this.add(canvas, BorderLayout.CENTER);
ScheduledThreadPoolExecutor executor =
new ScheduledThreadPoolExecutor(3);
executor.scheduleAtFixedRate(
new AnimationThread(this),
0L, 20L, TimeUnit.MILLISECONDS);
}
}
class AnimationThread implements Runnable
{
JApplet c;
public AnimationThread(JApplet c)
{
this.c = c;
}
public void run()
{
c.repaint();
}
}
class PaintSurface extends JComponent
{
private static final long serialVersionUID = 1L;
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Shape screenDisplay = new Rectangle2D.Float(
450, 175, 700, 500);
g2.setColor(Color.DARK_GRAY);
g2.fill(screenDisplay);
/*
* START TITLE SCREEN CREATION
*/
if(XenixMain.secondsCount > 0)
{
g.drawImage(XenixMain.XenixLogo, 500, 500, this);
}
g.drawImage(XenixMain.XenixBackground, 0, 0, this);
/*
* END TITLE SCREEN CREATION
*/
}
}
JFrame Class (Creates JFrame and adds the Applet):
package net.xenix.src ;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class XenixApplicationWindow extends JFrame
{
private static final long serialVersionUID = 1L;
static XenixMain xenix = new XenixMain();
static ImageIcon xenixIcon = new ImageIcon(XenixMain.imagePath + "XenixIcon.png");
public static void main(String[] args)
{
new XenixApplicationWindow();
}
public XenixApplicationWindow()
{
JFrame frame = new JFrame();
JTextField userInput = new JTextField(15);
JPanel panel1 = new JPanel(null);
frame.add(xenix);
frame.setSize(1600, 900);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setResizable(true);
frame.setIconImage(xenixIcon.getImage());
userInput.setBounds(0, 0, 120, 10);
panel1.add(userInput);
frame.add(panel1);
frame.setContentPane(panel1);
frame.setLocationRelativeTo(null);
frame.setTitle("Xenix");
xenix.init();
xenix.start();
frame.setVisible(true);
}
}
Have a look at this example and see if this helps a bit. For some information on the said topic, please see this link. Let me know, if still thingies are unclear.
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class BackgroundExample {
private JTextField tField;
private JButton button;
private CustomPanel contentPane;
private void displayGUI() {
JFrame frame = new JFrame("Background Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
contentPane = new CustomPanel();
contentPane.setLayout(new GridBagLayout());
JPanel componentPanel = new JPanel();
componentPanel.setOpaque(false);
tField = new JTextField("Nothing to display yet...", 20);
button = new JButton("Click me not!");
componentPanel.add(tField);
componentPanel.add(button);
contentPane.add(componentPanel);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
#Override
public void run() {
new BackgroundExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class CustomPanel extends JPanel {
private BufferedImage bImage;
public CustomPanel() {
try {
bImage = ImageIO.read(new URL("http://i.imgur.com/fHiBMwI.jpg"));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
#Override
public Dimension getPreferredSize() {
return (bImage != null ? new Dimension(
bImage.getWidth(), bImage.getHeight()) : new Dimension(400, 400));
}
#Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bImage, 0, 0, this);
}
}
I'd like some help in locating the error I'm making here. I'm relatively new to using Swing and this is the first game I've tried to make.
The problem is as follows: the code compiles fine, but when I run this code, nothing displays in the frame. I've noticed that if I remove the call to grabFrame in the Player class, and uncomment g.drawRect(...), that a rectangle will display in the frame, but when I add the grabFrame call back in, again nothing displays.
GamePanel:
import java.awt.Dimension;
import javax.swing.JFrame;
public class GamePanel extends JFrame {
final static int GWIDTH = 512;
final static int GHEIGHT = 512;
static final Dimension screenSize = new Dimension(GWIDTH, GHEIGHT);
JavaGame game;
public GamePanel () {
this.setTitle("Game");
this.setSize(screenSize);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game = new JavaGame(screenSize);
add(game);
}
public static void main (String[] args) {
GamePanel gp = new GamePanel();
}
}
JavaGame:
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
class JavaGame extends JPanel {
// Game variables
private GameEngine gameEngine;
public JavaGame(Dimension screenSize) {
this.setPreferredSize(screenSize);
gameEngine = new GameEngine();
}
#Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
gameEngine.draw(g);
}
}
GameEngine:
import java.awt.Graphics;
public class GameEngine {
Player p1;
public GameEngine () {
p1 = new Player();
}
public void draw(Graphics g) {
drawCharacters(g);
}
private void drawCharacters(Graphics g) {
p1.draw(g);
}
}
Player:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
public class Player {
private BufferedImage frame;
private URL frameURL;
public Player() {
try {
frameURL = new File("C:/Users/admin/workspace/JavaGame/src/civ_walk_south.png").toURI().toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
grabFrame();
}
private void grabFrame() {
try {
frame = ImageIO.read(frameURL);
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
g.drawImage(frame, 50, 50, null);
//g.drawRect(50, 50, 50, 50); // put this here for testing, when uncommented it only works if call to grabFrame() is removed from constructor
}
}
Regarding:
public GamePanel () {
this.setTitle("Game");
this.setSize(screenSize);
this.setResizable(false);
this.setVisible(true); // *****
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game = new Game(screenSize);
add(game);
}
Call setVisible(true) on your JFrame after adding all components, not before.
So,....
public GamePanel () {
this.setTitle("Game");
// this.setSize(screenSize); // **** don't set sizes like this
this.setResizable(false);
// this.setVisible(true); // *****
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game = new Game(screenSize);
add(game);
pack(); // **** this should size the GUI to the preferred sizes
setVisible(true); // **** call this here ****
}
Also, have you tested to see if the image obtained is null or not before drawing it?
This smells funny to me as your image path appears to be in a location that will be included inside of the jar file:
frameURL = new File("C:/Users/admin/workspace/JavaGame/src/civ_walk_south.png")
.toURI().toURL();
Why not get your image as a resource and not first as a file?
put add(game) at the topit might also help to setVisible(true) at the very end as well. You also want to call a pack method as well
In the java game class don't declare this.setPreferredSize(screensize) in the java game class instead put it in game panel class also don't just call setPreferredSize() you alos want setMaximumSize() and setMinimumSize() so your game panel class should look like this.
import java.awt.Dimension;
import javax.swing.JFrame;
public class GamePanel extends JFrame {
final static int GWIDTH = 512;
final static int GHEIGHT = 512;
static final Dimension screenSize = new Dimension(GWIDTH, GHEIGHT);
JavaGame game;
public GamePanel () {
game = new JavaGame(screenSize);
game.setPreferredSize(screenSize);
game.setMaximumSize(screenSize);
game.setMinimumSize(screenSize);
add(game);
this.setTitle("Game");
this.setSize(screenSize);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
GamePanel gp = new GamePanel();
}
}
Hope this helps.
I want to color some JButtons, some other questions here showed me, that it would be easier
to paint a little image (did it with gimp) and set it as icon for the JButton.
The number and size of the buttons should be variable (they're in a grid), so I want a high res image that I can scale how i need it.
The problem now is, I don't know how to 'cut the edges' of the icon, because the buttons have rounded edges.
Here you can see that the image is not inside of the button border.
And here is my method in the class that extends JButton.
public void setYellow() {
URL u = getClass().getResource("/img/yellow.png");
ImageIcon i = new javax.swing.ImageIcon(u);
//Image img = i.getImage();
//img = img.getScaledInstance(size, size, java.awt.Image.SCALE_SMOOTH);
//i = new ImageIcon(img);
setIcon(i);
}
EDIT
package test;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import control.Control;
import view.Field;
import view.View;
public class HelloWorldSwing {
/**
* #param args
*/
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
TestView.initialize();
}
});
}
}
class TestView {
private static TestView view = new TestView();
public static TestView getView() {
return view;
}
private TestView() {
JFrame frame = new JFrame("HelloWorldSwing");
frame.setLayout(new GridLayout(0,3));
int buttonSize = 40;
frame.getContentPane().add(new MyButton(buttonSize));
frame.getContentPane().add(new MyButton(buttonSize));
frame.getContentPane().add(new MyButton(buttonSize));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void initialize() {
}
}
class MyButton extends JButton {
int size;
public MyButton(int size) {
this.size = size;
setPreferredSize(new Dimension(size, size));
this.addActionListener(new ButtonHandler());
setBorder(LineBorder.createGrayLineBorder());
setOpaque(true);
}
public void setYellow() {
//URL u = getClass().getResource("/img/test.png"); // 64x64 png pic
URL u1 = null;
try {
u1 = new URL("http://assets1.qypecdn.net/uploads/users/0195/7210"
+ "/calvin_yellow_original_thumb.jpg");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ImageIcon i = new javax.swing.ImageIcon(u1);
// Image img = i.getImage();
// img = img.getScaledInstance(size, size, java.awt.Image.SCALE_SMOOTH);
// i = new ImageIcon(img);
setIcon(i);
// setBorderPainted(false);
// setContentAreaFilled(false); did not help
}
}
class ButtonHandler implements ActionListener {
#Override
public void actionPerformed(ActionEvent e) {
MyButton mb = (MyButton) e.getSource();
mb.setYellow();
}
}
EDIT 2
Here are the pictures where the lines in setYellow()
setBorderPainted(false);
setContentAreaFilled(false);
are not commented out (unfortunately there is no difference)
Before button is clicked:
After button is clicked:
UPDATE
I added Borders to the MyButton constructor
setBorder(LineBorder.createGrayLineBorder());
and now the icons are inside the button borders. I added pictures.
But as you can see, we don't have these rounded button edges anymore.
button.setBorderPainted(false);
button.setContentAreaFilled(false);
As seen in this answer.
Update
I do not quite get what you are trying to achieve if not this.
I made the rollover icon to be orange so that we could easily see the size of one button, but otherwise I put 4 in a row to ensure the minimum frame width did not insert extra space between the buttons in a row.
import java.awt.*;
import java.awt.Image;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class HelloWorldSwing {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
TestView.getView();
}
});
}
}
class TestView {
private static TestView view = new TestView();
public static TestView getView() {
return view;
}
private TestView() {
JFrame frame = new JFrame("HelloWorldSwing");
frame.setLayout(new GridLayout(3,4));
int buttonSize = 40;
for (int i=0; i<12; i++) {
frame.getContentPane().add(new MyButton(buttonSize));
}
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void initialize() {
}
}
class MyButton extends JButton {
int size;
public MyButton(int size) {
this.size = size;
setPreferredSize(new Dimension(size, size));
this.addActionListener(new ButtonHandler());
setOpaque(true);
setYellow();
}
public Image getImage(int sz, Color color) {
BufferedImage bi = new BufferedImage(sz,sz,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(color);
g.fillRect(0, 0, sz, sz);
g.dispose();
return bi;
}
public void setYellow() {
Image img = getImage(64, Color.YELLOW).getScaledInstance(size, size, java.awt.Image.SCALE_SMOOTH);
setIcon(new ImageIcon(img));
Image rollover = getImage(64, Color.ORANGE).getScaledInstance(size, size, java.awt.Image.SCALE_SMOOTH);
setRolloverIcon(new ImageIcon(rollover));
setBorderPainted(false);
setContentAreaFilled(false);
}
}
class ButtonHandler implements ActionListener {
#Override
public void actionPerformed(ActionEvent e) {
MyButton mb = (MyButton) e.getSource();
mb.setYellow();
}
}