2014-11-24 1 views
0

값이 너무 길면 각 셀의 팁을 보여주는 툴팁을 어떻게 구현할 수 있습니까?열이 잘리는 경우에만 JTable의 툴팁 표시

테이블 렌더링을 사용하면 일부 셀을 색칠하게됩니다. 그래서 가장 쉬운 방법은 그 안에 metod를 구현하는 것입니다.

public class ColorRenderer extends DefaultTableCellRenderer { 

     final int STATUS_COL = 7; 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean 
    hasFocus, 
     int row, int col) { 

     Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 

    int modelIndex = table.convertRowIndexToModel(row); 
     String type = (String) table.getModel().getValueAt(modelIndex, 7); 

     if ("".endsWith(type)) { 
     component.setBackground(table.getBackground()); 
     component.setForeground(table.getForeground()); 


     } else { 
     component.setBackground(Color.RED); 
     component.setForeground(Color.WHITE); 

     } 
     if (isSelected) { 
     setBackground(table.getSelectionBackground()); 
     setForeground(table.getSelectionForeground()); 

     } 

     return component; 
     } 

} 

감사합니다.

+0

두 가지 방법 I 'JTable' 또는'TableCellRenderer'의'getToolTip (MouseEvent)'메소드를 오버라이드 (override) 해, 셀의 사이즈를 렌더러의 사이즈와 비교해,'null'를 돌려 주거나 그것은 맞거나 툴팁 값이 없을 때 ... – MadProgrammer

+0

내 대답을 참조하십시오 @MadProgrammer – okaisan1

답변

1

JTablegetToolTipText(MouseEvent) 이벤트를 재정의하는 것으로 시작하십시오.

public String getToolTipText(MouseEvent e) { 
    String toolTipText = null; 

... 이런 식으로 우리가 현재의 제약 조건이 무엇인지 알고,

Point p = e.getPoint(); // MouseEvent 
int col = columnAtPoint(p); 
int row = rowAtPoint(p); 

는 세포에게 현재 크기를 가져옵니다 ... 셀이 주어진 마우스 위치 좌표를 가져

Rectangle bounds = getCellRect(row, col, false); 

모델의 셀에 대한 현재 값을 기반으로 셀의 렌더러를 가져옵니다 ...

Object value = getValueAt(row, col); 
Component comp = prepareRenderer(getCellRenderer(row, col), row, col); 

은 ...

return toolTipText; 
} 
+0

예, 작동합니다! 많은 감사 :-) 나는 나의 해결책을 게시한다. – okaisan1

+0

글쎄, 좋은 변화를 만들어 ... – MadProgrammer

0

기본적으로 테이블 셀에 대해 표시되는 도구 설명 텍스트는 셀의 렌더러에 의해 결정됩니다. 하지만 경우에 따라서는로 getToolTipText (MouseEvent)를 사용합니다 방법의 JTable의 구현을 재정의 도구 설명 텍스트를 지정하는 것이 더 간단 할 수 있으므로 그래서 당신이

을 얻을 내부는 리얼 셀 값으로 getTableCellRendererComponent 방법에

setToolTipText(...); 

을 추가 할 수 있습니다

Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 

    int modelIndex = table.convertRowIndexToModel(row); 
     String type = (String) table.getModel().getValueAt(modelIndex, 7); 

     if ("".endsWith(type)) { 
     component.setBackground(table.getBackground()); 
     component.setForeground(table.getForeground()); 


     } else { 
     component.setBackground(Color.RED); 
     component.setForeground(Color.WHITE); 

     } 
     if (isSelected) { 
     setBackground(table.getSelectionBackground()); 
     setForeground(table.getSelectionForeground()); 

     } 
     setToolTipText(...); 
     return component; 
     } 
+0

'TableCellRenderer'는'getTableCellRendererComponent'가 호출 될 때'JTable'이 그것을 만드는 크기를 알지 못합니다. 선호하는 크기인지 알고 ... – MadProgrammer

0

솔루션 셀 크기에 대한 렌더러 구성 요소의 기본 크기 ...

if (comp.getPreferredSize().width > bounds.width) { 
    toolTipText = comp.getToolTipText(); 
} 

반환 도구 팁을 비교 :

JTable auditTable = new JTable(){ 

    public String getToolTipText(MouseEvent e) { 

        String toolTipText = null; 
        Point p = e.getPoint(); // MouseEvent 
        int col = columnAtPoint(p); 
        int row = rowAtPoint(p); 
        Component comp = prepareRenderer(getCellRenderer(row, col), row, col); 

        Rectangle bounds = getCellRect(row, col, false); 


        try { 
         //comment row, exclude heading 
         if (comp.getPreferredSize().width > bounds.width) { 
          toolTipText = getValueAt(row, col).toString(); 
         } 
        } catch (RuntimeException e1) { 
         //catch null pointer exception if mouse is over an empty line 
        } 
        return toolTipText; 

        } 
     };