View Full Version : JComboBox java!!!!! PLEASE AIUTO
vi prego di aiutarmi devo consegnare un progetto...
in pratica sto facendo il gioco degli scacchi e vorrei aggiungere una comboBox per quanto riguarda la promozione delle pedine.
Quella che vorrei fare sarebbe una cosa simile a questa:
http://www.java2s.com/Code/Java/Swing-JFC/CustomComboBoxwithImage.htm
mettendo come descrizione della mia combobox una IMMAGINE CON IL SUO NOME A FIANCO.
il codice riportato dalla sun non lo capisco, in quanto alla ComboBox viene dato come variabile un array di integer...quidi dove me le va a prendere le immagini???
ecco il mio codice:
String namesIconBox[]={"regina","alfiere","torre","cavallo"};
ImageIcon [] images = new ImageIcon[namesIconBox.length];
Integer [] intArray = new Integer[namesIconBox.length];
for (int i = 0; i < namesIconBox.length; i++) {
intArray[i] = new Integer(i);
iconeBox [i]= new ImageIcon("images/" + namesIconBox[i] + ".gif");
if (images[i] != null) {
images[i].setDescription(namesIconBox[i]);
}
}
JComboBox imagesJComboBox = new JComboBox(intArray);
ovviamente però in questo modo la mia conbo contiene dei NUMERIIIIIIIIIIIII
vi prego di aiutarmi
morskott
20-06-2007, 18:52
penso tu debba implementare l'interfaccia "ComboBoxEditor" facendo ritornare al metodo "getEditorComponent()" il "Component" (suggersco un JPanel) esattamente quello che desideri e poi passi la tua implementazione al JComboBox con il metodo "configureEditor(ComboBoxEditor anEditor, Object anItem)".
In pratica ti crei un JPanel che contenga l'immagine voluta e la stringa di descrizione, scrivi una classe che implementi quell'interfaccia e che ritorni la JPanel che ti sei creato, dici al JComboBox tramite quel metodo che vuoi usare la tua implementazione del ComboBoxEditor e dovresti aver finito.
Almeno è quello che ho inteso spulciandomi la javadoc e andando leggermente di fantasia.
Prova e fammi sapere.
ti ringrazio per avermi risposto!
appunto, io dovrei aggiungere però la ComboBox in un pannello conteuto in un Frame, in pratica ci sarebbe il frame che contiene più panel...quello con scacchiera...comandi...e proprio in questo dovrei aggiungere queta comboBox
:(
Scarta l'array di interi e usa l'array di ImageIcon per il costruttore della casella combinata per ottenere le immagini:
JComboBox imagesJComboBox = new JComboBox(iconeBox);
Se vuoi un testo, crei un array di JLabel e usi quello, assegnando alla casella combinata un proiettore ad hoc. Come esempio di questo secondo caso:
import java.awt.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { public void run() {
new Main().show();
}});
}
public void show() {
/* Questi sono i nomi dei pezzi */
String[] images = { "regina", "alfiere", "torre", "cavallo" };
/* Questo è l'array di JLabel che sarà usato per la casella
combinata */
JLabel[] icons = new JLabel[images.length];
/* Per ogni nome di pezzo... */
for(int i = 0; i < images.length; i++) {
/* carica un'immagine supponendo che essa risieda in un file di
nome [nome pezzo].png */
ImageIcon icon = new ImageIcon(
getClass().getResource("/" + images[i] + ".png"));
/* Crea un'etichetta con quell'icona */
JLabel label = new JLabel(icon);
/* Usa il nome del pezzo come testo per l'etichetta */
label.setText(images[i]);
/* Rende opaca l'etichetta */
label.setOpaque(true);
/* Fa apparire il testo sotto l'icona, al centro */
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
/* Separa un po' il contenuto dell'etichetta dal bordo esterno
della stessa */
label.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
/* Assegna l'etichetta così creata all'i-esimo elemento dell'array
di etichette */
icons[i] = label;
}
/* Crea un proiettore baro per la casella combinata */
ListCellRenderer boxRenderer = new ListCellRenderer() {
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus)
{
/* I valori della casella combinata sono dei JLabel, cosa
che sappiamo per certo dato che glieli passeremo noi. Dunque
il componente che proietta il valore dell'elemento è
l'elemento stesso */
JLabel label = (JLabel)value;
/* Se il valore è selezionato colora il suo sfondo di grigio,
altrimenti di bianco */
label.setBackground(isSelected ? Color.LIGHT_GRAY : Color.WHITE);
/* Restituisce l'etichetta */
return label;
}
};
/* Crea una casella combinata che usa le etichette come valori */
JComboBox box = new JComboBox(icons);
/* Usa il proiettore su definito, che restituirà i valori (etichette)
come proiettori di sè stessi */
box.setRenderer(boxRenderer);
/* Finestra con dentro la casella combinata e via. */
JFrame frame = new JFrame("Test");
frame.add(box, BorderLayout.CENTER);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
ti ringrazio per l'aiuto ma posso talmente ignorante che non riesco a farlo funzionare lo stesso...mi sto deprimendo...
siete mostruosamente bravi!
JJ Calabria
21-06-2007, 00:17
:muro:
Ancora nn ci sono arrivato a questa fase, purtroppo..Cmq maledetto Rossi..
Ciao!
...mi sto deprimendo...
Calma e sangue freddo.
Forse non funziona perchè non trova le immagini. Prova a rimpiazzare, nel codice che ho incollato, la linea:
getClass().getResource("/" + images[i] + ".png"));
con
getClass().getResource("/images/" + images[i] + ".gif"));
Oppure incolla la traccia dell'eccezione che si verifica quando provi ad eseguire il programma.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.