Witam,
robię właśnie aplikację, która ma pobierać aktualne warunki atmosferyczne z jakiegoś serwisu internetowego i wyświetlać je w komórkach tabeli (JTable). Jednym z parametrów jest kierunek wiatru, który na stronie jest reprezentowany w postaci strzałek, natomiast w źródle strony reprezentowany jest za pomocą liczb: czyli np. liczba 9 odpowiada rysunkowi s9.gif, a liczba 13 rysunkowi s13.gif. Najpierw robię to wszystko tak, że pobieram dane z serwisu, gdzie kierunek wiatru jest reprezentowany za pomocą liczby.
Następnie robię klasę do renderowania mojej tabelki:
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
public class WindRenderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
if(getText().equals("0")){
System.out.println("OK");
setIcon(new ImageIcon("wind/s0.gif"));
}
else if(getText().equals("1")){
setIcon(new ImageIcon("wind/s1.gif"));
}
else if(getText().equals("2")){
setIcon(new ImageIcon("wind/s2.gif"));
}
else if(getText().equals("3")){
setIcon(new ImageIcon("wind/s3.gif"));
}
else if(getText().equals("4")){
setIcon(new ImageIcon("wind/s4.gif"));
}
else if(getText().equals("5")){
setIcon(new ImageIcon("wind/s5.gif"));
}
else if(getText().equals("6")){
setIcon(new ImageIcon("wind/s6.gif"));
}
else if(getText().equals("7")){
setIcon(new ImageIcon("wind/s7.gif"));
}
else if(getText().equals("8")){
setIcon(new ImageIcon("wind/s8.gif"));
}
else if(getText().equals("9")){
setOpaque(true);
setIcon(new ImageIcon("wind/s9.gif"));
}
else if(getText().equals("10")){
setOpaque(true);
setIcon(new ImageIcon("wind/s10.gif"));
}
else if(getText().equals("11")){
setOpaque(true);
setIcon(new ImageIcon("wind/s11.gif"));
}
else if(getText().equals("12")){
setOpaque(true);
setIcon(new ImageIcon("wind/s12.gif"));
//System.out.println(getText()+"bfbfyfbyebfeybfye");
}
else if(getText().equals("13")){
setOpaque(true);
setIcon(new ImageIcon("wind/s13.gif"));
}
else if(getText().equals("14")){
setOpaque(true);
setIcon(new ImageIcon("wind/s14.gif"));
}
//setText((String)value);
setVisible(true);
setOpaque(true);
if(hasFocus || isSelected)
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
else
setBorder(null);
return this;
}
}
kolumnie zawierającej kierunki wiatru przypisuję obiekt tej klasy:
WindRenderer wr = new WindRenderer();
table.getColumnModel().getColumn(3).setCellRenderer(wr);
Problem polega na tym, że strzałki są źle wyświetlane, tzn. kiedy zaczynam przesuwać scrollem, lub zaznaczać komórki tabeli strzałki zmieniają się w przybliżeniu losowo.
Na rysunku można zauważyć, że strzałki są nieadekwatne do wartości liczbowych (np. 14 i 4 mają ten sam kierunek). Poza tym niektóre strzałki są jakieś powyginane, nie wiem dlaczego. Po kliknięciu na komórkę z taką wygiętą strzałką jej kształt wraca do normy.
Jeszcze jedna rzecz, w klasie WindRenderer muszę za każdym razem umieszczać kod setText((String)value) czyli tekst, który był przed dodaniem strzałki, w przeciwnym wypadku nie wyświetli się obrazek w komórce. Czemu tak się dzieje?
Z góry dzięki za odpowiedź.