Java [1241]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • 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

    Oczywiście to co potrzebujesz jest w dokumentacji:

    http://java.sun.com/javase/6/docs/a...


  • 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.
| |

Wszystko co związane z programowaniem w Java (J2EE, JSP, JDBC, itd) test



Fotki

Miejsca grona (1)