JTable i obrazki w komórkach

0

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.

user image

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

0

[do usunięcia]

1 użytkowników online, w tym zalogowanych: 0, gości: 1