Immagini cliccabili

DOMANDA:

Come posso creare un'immagine cliccabile che mostra un messaggio?


RISPOSTA:

Una maniera efficiente, soprattutto se le immagini sono piccole, è quella di utilizzare i JButton a cui applicare l'immagine desiderata tramite ImageIcon. Dopo di che si apre tramite JOptionPane un dialog che mostra il messaggio definito.
Da notare come l'implementazione dell'ActionListener sia una inner class. Se dovesse diventare più complessa, si può spostare in una classe a parte.
Vediamo com'è implementata la logica del programma con la classe ImageDialog:

package immagini;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class ImageDialog {

   private JFrame frame;

   public ImageDialog(JFrame frame) {
  this.frame = frame;
   }

   public JButton generateButton(String filename, int x, int y, String message) {
  ImageIcon img = new ImageIcon(filename);
  JButton button = new JButton(img);
  button.setBorder(null);
  button.setBounds(x, y, img.getIconWidth(), img.getIconHeight());
  button.addActionListener(new MyActionListener(message));
      return button;
  }

  public class MyActionListener implements ActionListener {
  private String message;

  public MyActionListener(String message) {
this.message = message;
  }

  public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, message);
  }
  }
}



Adesso verifichiamo il comportamento con una classe di Test:

package immagini;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
  public static void main(String[] args) {
  JFrame frame = new JFrame("Show Message Dialog");

  ImageDialog dialog = new ImageDialog(frame);
  JButton a = dialog.generateButton("C:\\1.jpg", 20, 50, "lancill.blogspot.it: A");
  JButton b = dialog.generateButton("C:\\2.png", 40, 250, "lancill.blogspot.it: B");
  frame.add(a);
  frame.add(b);

  frame.setSize(500, 500);
  frame.setLayout(null);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}


In questo esempio si posizionano i bottoni alle coordinate preferite, ma per fare ciò è necessario disabilitare il layout del frame.


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java