-
Tomek
Hej,
Napisałem sobie taką klase:
class MyListCellRenderer implements ListCellRenderer
{
@Override
public Component getListCellRendererComponent(J List list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
String stringValue = "" + value;
JLabel lbl = new JLabel(stringValue);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.X_AX IS));
panel.add(lbl);
panel.add(Box.createGlue());
if (isColorExists(stringValue)) panel.add(new MyColorView((Color)Color.class .getField(stringValue)));
return panel;
}
boolean isColorExists(String maybeColor)
{
Field[] colors = Color.class.getFields();
for (int i = 0; i < colors.length; i++ )
{
if (maybeColor.equals(colors.g etName())) return true;
}
return false;
}
}
Jest to jak widać rederer komórek listy z SWINGa. MyColorView jest to przezemnie napisany komponent który pokazuje kolor w czarnej ramce, co jednak istotne, posiada on konstruktor MyColorView(Color), argument to oczywiście java.awt.Color.
Problem generuje instrukcja:
panel.add(new MyColorView((Color)Color.class .getField(stringValue)));
Ponieważ nie może zkonwertować Field na Color (czego się też spodziewałem). To co chciałem uzyskać to stworzenie obiektu klasy Color który odpowiada stałej zdefiniowanej w klasie Color i o nazwie przechowywanej w zmiennej stringValue.
Jak by ktoś mi z tym pomógł to był bym wdzięczny :]
PZDR -
Lennyn
-
the_javu
Panie Lennyn: zabawa w Radio RT FM to trochę za mało. W sformułowaniu tematu widać błąd w rozumieniu mechanizmu refleksji: to nie jest żadna konwesja. String jest nazwą pola, do którego możemy się dostać za pomocą klasy Field. Na obiekcie klasy Field wywołujemy get z parametrem null i otrzymujemy wartość tego pola jeśli jest statyczne. -
-
Lennyn
Hm, ale ja podałem też samą odpowiedź - link do dokumentacji odpowiedniej metody w Field (którą to klasę Tomek znalazł, tylko po prostu nie wiedział jak jej użyć).
Tak czy inaczej - problem solved.
-
Tomek
Dzieki wielkie, oczywiście metoda get rozwiązuje problem a kłopotliwa linia powinna wyglądać tak:
panel.add(new MyColorView((Color)Color.class .getField(stringValue).get(nul l))); -
the_javu
Odpowiedź zauważyłem, tylko uznałem, że warto trochę ją wyjaśnić. No problem.
Podobne Tematy
|
|
Wszystko co związane z programowaniem w Java (J2EE, JSP, JDBC, itd) test
Miejsca grona (1)
-
Kino Luna ul. Marszałkowska, Warszawa
www.kinoluna.pl kino.luna@maxfilm.com.pl 22 621 78 28
- Dodaj miejsce

