Kevin Jeffrey
Kevin Jeffrey

Reputation: 1

Inserting image through event handling?

I am encountering problems with event handling in java.

I want to add the image1 if button 1 is pressed, image2 if button 2 is pressed, et cetera.

This is my code till now; Can anyone help? This code doesn't compile.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import  javax.swing.ImageIcon;

public class MyPanel extends JPanel {
    private JLabel jcomp1;
    private JButton jcomp2;
    private JButton jcomp3;
    private JButton jcomp4;
    private JButton jcomp5;
    private JButton jcomp6;
    private JButton jcomp7;
    private JButton jcomp8;
    private JButton jcomp9;
    private ImageIcon image1;
    private ImageIcon image2;
    private ImageIcon image3;
    private ImageIcon image4;
    private ImageIcon image5;
    private ImageIcon image6;
    private ImageIcon image7;
    private ImageIcon image8;

    public MyPanel() {
        //construct components
        image1 = new ImageIcon(getClass().getResource("hang1.jpg"));
        image2 = new ImageIcon(getClass().getResource("hang2.jpg"));
        image3 = new ImageIcon(getClass().getResource("hang3.jpg"));
        image4 = new ImageIcon(getClass().getResource("hang4.jpg"));
        image5 = new ImageIcon(getClass().getResource("hang5.jpg"));
        image6 = new ImageIcon(getClass().getResource("hang6.jpg"));
        image7 = new ImageIcon(getClass().getResource("hang7.jpg"));
        image8 = new ImageIcon(getClass().getResource("hang8.jpg"));


        jcomp1 = new JLabel (image1);
        jcomp2 = new JButton ("1");
        jcomp3 = new JButton ("2");
        jcomp4 = new JButton ("3");
        jcomp5 = new JButton ("4");
        jcomp6 = new JButton ("5");
        jcomp7 = new JButton ("6");
        jcomp8 = new JButton ("7");
        jcomp9 = new JButton ("8");

        //events
        jcomp2.setActionCommand("1");
        jcomp3.setActionCommand("2");
        jcomp4.setActionCommand("3");
        jcomp5.setActionCommand("4");
        jcomp6.setActionCommand("5");
        jcomp7.setActionCommand("6");
        jcomp8.setActionCommand("7");
        jcomp9.setActionCommand("8");


        jcomp2.addActionListener(new ButtonClickListener()); 
        jcomp3.addActionListener(new ButtonClickListener()); 
        jcomp4.addActionListener(new ButtonClickListener()); 
        jcomp5.addActionListener(new ButtonClickListener()); 
        jcomp6.addActionListener(new ButtonClickListener()); 
        jcomp7.addActionListener(new ButtonClickListener()); 
        jcomp8.addActionListener(new ButtonClickListener()); 
        jcomp9.addActionListener(new ButtonClickListener()); 


        //adjust size and set layout
        setPreferredSize(new Dimension(624, 537));
        setLayout(null);

        //add components

        add(jcomp2);
        add(jcomp3);
        add(jcomp4);
        add(jcomp5);
        add(jcomp6);
        add(jcomp7);
        add(jcomp8);
        add(jcomp9);

        // set component bounds (only needed by Absolute Positioning)
        jcomp1.setBounds(15, 10, 595, 350);
        jcomp2.setBounds(35, 375, 100, 25);
        jcomp3.setBounds(190, 375, 100, 25);
        jcomp4.setBounds(320, 375, 100, 25);
        jcomp5.setBounds(465, 375, 100, 25);
        jcomp6.setBounds(35, 450, 100, 25);
        jcomp7.setBounds(190, 450, 100, 25);
        jcomp8.setBounds(320, 450, 100, 25);
        jcomp9.setBounds(465, 450, 100, 25);
    }

    class ButtonClickListener implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();  
            if (command.equals("1")) {
                jcomp1.set(image1);
            }

        }       
    }


    public static void main (String[] args) {
        JFrame frame = new JFrame("MyPanel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new MyPanel());
        frame.pack();
        frame.setVisible (true);
    }
}

Upvotes: 0

Views: 92

Answers (2)

user1803551
user1803551

Reputation: 13427

I believe you are trying to get something like this:

public class MyPanel extends JPanel {

    private JLabel label;
    private JButton[] buttons = new JButton[8];
    private ImageIcon[] images = new ImageIcon[8];

    public MyPanel() {

        JPanel buttonPanel = new JPanel(new GridLayout(2, 4, 15, 10));

        for (int i = 0; i < images.length; i++) {
            images[i] = new ImageIcon(getClass().getResource(i+1 + ".png"));
            buttons[i] = new JButton(String.valueOf(i+1));
            buttons[i].setActionCommand(String.valueOf(i+1));
            buttons[i].addActionListener(new ButtonClickListener());
            buttonPanel.add(buttons[i]);
        }
        label = new JLabel(images[0]);

        setLayout(new BorderLayout());
        add(label);
        add(buttonPanel, BorderLayout.PAGE_END);
    }

    class ButtonClickListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            label.setIcon(images[Integer.parseInt(e.getActionCommand()) - 1]);
        }
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame("MyPanel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new MyPanel());
        frame.pack();
        frame.setVisible(true);
    }
}

Notes:

  • Don't forget to change the image file name.
  • You can play with the layout manager to get what you want.
  • I removed setPreferredSize(new Dimension(624, 537)); because you didn't specify a resize behavior which would make this line meaningless. pack() would take care of the sizes for you.

Upvotes: 1

ControlAltDel
ControlAltDel

Reputation: 35011

Set the icon of the button or label. To do this, you need to create an ImageIcon, which has multiple constructors to create from a filename or a loaded image.

jcomp1.setIcon(new ImageIcon(...));

Upvotes: 0

Related Questions