Problem z ActionListerem

0

Witam. Mam za zadanie zrobić aplikację w której można wybrać z ComboBoxa obraz który ma się obok wtedy wyświetlić. Początkowy obraz się ładuje poprawnie ale nie działa zupełnie zmienianie się obrazów (prawdopodobnie nie wywołuje się w ogóle metoda actionPerformed klasy ActionListener).
efekt działania aplikacji

Program składa się 2 klas. Pierwsza - PrzegladarkaZdjec.java:

package przegladarkazdjec;
import javax.swing.JFrame;

public class PrzegladarkaZdjec extends JFrame{
    public static void main(String[] args) {
        GUI gui1 = new GUI();
        gui1.show();
    }
}

Druga - GUI.java:

package przegladarkazdjec;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class GUI extends javax.swing.JFrame {
    Obraz obraz;

    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox<>();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "obraz1.jpg", "obraz2.jpg", "obraz3.jpg" }));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(275, Short.MAX_VALUE)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(36, 36, 36))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(252, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        
    GUI() {
        super("Grafika w aplikacji"); //tworzymy panel z rysunkiem
        setSize(250,200); 
        obraz = new Obraz("img/obraz2.JPG"); 
        obraz.setDoubleBuffered(true); //ustawiamy podwójne buforowanie
        add(obraz); //dodajemy do aplikacji panel z rysunkiem
        setVisible(true);
        initComponents();
    }
  
    class Obraz extends JPanel {
        Image im;
        String sciezka="img/obraz1.JPG";
        
        Obraz() {}
        Obraz(String sciezka) {
            this.sciezka = sciezka; 
        }  
        
        public void setSciezka(String sciezka) {
            this.sciezka = sciezka;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            im = Toolkit.getDefaultToolkit().getImage(sciezka);
            g.drawImage(im, 10, 10, this);
        }
    }

    private class ActionListener1 implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent ae) {
            int wybor = jComboBox1.getSelectedIndex();
            obraz.setSciezka("img/obraz"+wybor+".JPG");
            repaint();               
        }       
    } 
    
    // Variables declaration - do not modify                     
    private javax.swing.JComboBox<String> jComboBox1;
    // End of variables declaration                   
}

Proszę o pomoc.

0

Jak to tak można robić bezmyślnie to nie wiem. Jeżeli używasz jakiegoś IDE to masz przecież napisane, że ActionListener1 nie jest użyty. Skoro nie jest użyty to proste że nie zostanie wywołany. W initComponents dodaj sobie:

jComboBox1.addActionListener(new ActionListener1());

Oprócz tego zmień sobie nazwy obrazków bo masz 1, 2, 3 a w tym combo indeksujesz od 0. Elo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1