Se ti riferisci al fatto che la figura è "scalettata", si può migliorare, basta attivare il "antialias".Originariamente inviato da Chiarula
(anche se disegna davvero male, ma pazienza)
Inoltre in paintComponent come prima cosa dovresti invocare la versione "super":
super.paintComponent(g);
Ah, e il paintComponent tienilo protected, non public (non serve aprire a questo livello).
Io invece ti suggerirei un'altra cosa: le celle di JComboBox possono trattare tecnicamente qualunque tipo di oggetto. Come sono gestiti e poi visualizzati dipende innanzitutto dal "model" usato dal JComboBox e dal "renderer" che si occupa di fornire il componente da "stampare" sulla cella.Originariamente inviato da Chiarula
codice:private int spessore = jSlider1.getValue(); private Color colore; private int c = jComboBox1.getSelectedIndex(); if (c == 0) { colore = Color.WHITE; } else if (c == 1) { colore = Color.BLACK; } else if (c == 2) { colore = Color.BLUE; } else if (c == 3) { colore = Color.GREEN; } else if (c == 4) { colore = Color.GRAY; } else if (c == 5) { colore = Color.YELLOW; } else if (c == 6) { colore = Color.PINK; } else if (c == 7) { colore = Color.RED; } else if (c == 8) { colore = Color.CYAN; }
Una idea semplice e "ad oggetti" è mettere nel model oggetti di una tua classe es. ColoreDisegno che contiene 2 cose: una stringa (la descrizione) e il java.awt.Color.
La stringa la fai restituire dal toString(), per il colore predisponi un apposito metodo "getter".
Il renderer di "default" di JComboBox fornisce semplicemente un JLabel il cui testo lo ottiene dal toString() sull'oggetto. Il risultato è che nel JComboBox puoi vedere i nomi che definisci (es. "Rosso") ma gli item nel JComboBox sono i tuoi oggetti ColoreDisegno.
A quel punto quando la selezione cambia (registra un ActionListener sul JComboBox) fai:
codice:ColoreDisegno coloreSelezionato = (ColoreDisegno) coloreCombo.getSelectedItem(); Color color = coloreSelezionato.getColor(); // Questo getColor lo definisci tu in ColoreDisegno