2013-05-28 4 views
0

셀의 내용에 따라 이미지를 표시하고 싶은 JTable을 가지고 있습니다.이 작업을 수행하기 위해 이미 자체 셀 렌더러를 구현해야합니다. 그러나 첫 번째 이미지가 셀에 그려 지자 마자 프로그램은 내용에 관계없이 다른 셀에 이미지를 그립니다. 나는 거의 모든 것을 시도해 보았고 해결책을 찾기 위해 인터넷을 샅샅이 뒤졌습니다. 여기 내 코드는 다음과 같습니다.JTable Custom TableCellRenderer 이미지 표시

public class GameBoard extends JTable 
{ 
public GameBoard() 
{ 
    super(new GameBoardModel()); 
    setFocusable(false); 
    setCellSelectionEnabled(true); 
    setRowHeight(26); 

    TableColumn column = null; 
    for (int i = 0; i < getColumnCount(); i++) 
    { 
     column = getColumnModel().getColumn(i); 
     column.setPreferredWidth(26); 
    } 

    setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    setDefaultRenderer(Object.class, new CellRenderer()); 
} 

private class CellRenderer extends DefaultTableCellRenderer 
{ 
    private CellRenderer() 
    { 
     setHorizontalAlignment(JLabel.CENTER); 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, 
      Object value, boolean isSelected, boolean hasFocus, int row, 
      int column) 
    { 
     if (value.toString().equals("X")) 
     { 
      URL test = getClass().getResource(resources/icon.png"); 
      setIcon(new ImageIcon(test)); 
     } 
     else 
      setText(value.toString()); 

     return this; 
    } 
} 

내가 그 라인 어딘가에 어리석은 짓을하고 있다면 용서해주십시오. . .

미리 감사드립니다. Zig.

답변

4

는 호출하는 것을 잊지 마십시오

super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

을 방법의 시작에서 당신이 렌더러의 기본 설정을 얻을 수 있도록.

위의 문제가 해결되지 않으면 다음 코드는 무엇인가해야 할 수도 있습니다 : 또한

if (value.toString().equals("X")) 
{ 
    URL test = getClass().getResource(resources/icon.png"); 
    setIcon(new ImageIcon(test)); 
    setText(""); 
} 
else 
{ 
    setIcon(null); 
    setText(value.toString()); 
} 

, 당신은 렌더러의 이미지를 읽어 본 적이 있습니다. 렌더링은 여러 번 호출되므로 매번 이미지를 읽지 않아도됩니다. 클래스의 생성자에서 이미지를 읽습니다.

+0

'UIManager.getIcon ("html.pendingImage")'는 편리한 자리 표시 자입니다. – trashgod

+0

나는 100 만 번이나 감사 드리고 싶습니다. 뭔가 바보가 xD라는 많은 문제를 일으키고 있다고 믿을 수 없습니다. if (value.toString(). equals ("X")) { setIcon (new ImageIcon (test)); setText (""); } else { } setIcon (null); setText (value.toString()); } – user2426634

관련 문제