Ładowanie zdjęć i wywoływanie metody paint

0

Witam.
Zrobiłem prosta przeglądarkę zdjęć w javie, I chciałbym w zależności od wybranej pozycji z ComboBoxa aby wywoływała się metoda paint() i ładowała odpowiedni obrazek. Jak mam tą metodę wywołać w ActionEvent?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication17;


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


public class NewJFrame extends JFrame  {
   
 public NewJFrame() {
        initComponents();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    ImageIcon img1 = new ImageIcon("C:\\Users\\valery\\Desktop\\JAVA_LAB\\obraz1.JPG");
    ImageIcon img2 = new ImageIcon("C:\\Users\\valery\\Desktop\\JAVA_LAB\\obraz2.JPG");
 
   
  @Override
    public void paint(Graphics g)
    {
        g.drawImage(img1.getImage(), 200, 60, this);
         }
    @SuppressWarnings("unchecked")
    // <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[] { "Zdjecie 1", "Zdjecie 2", "Zdjecie 3", "Zdjecie 4" }));
        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(289, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(171, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if (jComboBox1.getSelectedItem()=="Zdjecie 1")
      {
         System.out.println("Wyswietli sie zdjecie 1");
       
      }
       else  if (jComboBox1.getSelectedItem()=="Zdjecie 2")
      {
         System.out.println("Wyswietli sie zdjecie 2");
         
      }
    }                                          


    public static void main(String args[]) {
      
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new NewJFrame().setVisible(true);
            
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox jComboBox1;
    // End of variables declaration                   


}

Z góry dzięki za pomoc

wstawienie kodu do posta<code=> - @furious programming

0
    public void paint(Graphics g)
    {
        if(flaga) 
            g.drawImage(img1.getImage(), 200, 60, this);
       else
            g.drawImage(img2.getImage(), 200, 60, this); 
    }

flaga to pole typu boolean. W metodach actionPerformed zmieniaj wartość pola flaga i wywołuj repaint.
Powyższe rozwiązanie jest dobre dla dwóch naprzemiennie wyświetlanych obrazków. W przeglądarce zdjęć zrób tak:

```java
    public void paint(Graphics g)
    {
          g.drawImage(img.getImage(), 200, 60, this);
    }

W metodzie actionPerformed zmieniaj wartość pola img (odczytuj nowy obrazek) i wywołuj repaint.

0

Mógłby ktoś przerobić żeby działał, bo ja niestety nie mam jeszcze pojęcia jak to zrobić :(

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication17;


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


public class NewJFrame extends JFrame  {
   
 public NewJFrame() {
        initComponents();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
   
 ImageIcon img1 = new ImageIcon("C:\\Users\\valery\\Desktop\\JAVA_LAB\\obraz1.JPG");
 ImageIcon img2 = new ImageIcon("C:\\Users\\valery\\Desktop\\JAVA_LAB\\obraz2.JPG");
 
   
  @Override
    public void paint(Graphics g)
    {
         g.drawImage(img1.getImage(), 190, 50, this);
      
         }
    @SuppressWarnings("unchecked")
    // <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[] { "Zdjecie 1", "Zdjecie 2", "Zdjecie 3", "Zdjecie 4" }));
        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(289, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(171, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if (jComboBox1.getSelectedItem()=="Zdjecie 1")
      {
        img1.getImage();
        img1.repaint(); //wywala błąd
      
        }
       else  if (jComboBox1.getSelectedItem()=="Zdjecie 2")
      {
        img2.getImage();
        img2.repaint(): //wywala błąd        
      
         
      }
    }                                          


    public static void main(String args[]) {
      
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new NewJFrame().setVisible(true);
            
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox jComboBox1;
    // End of variables declaration                   



}
1

Kodów wygenerowanych przez NetBeansa nie ruszam.
repaint jest metodą okna (JFrame), a nie metodą obrazka.

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