2012-12-27 5 views
1

JTable에 JToolTip을 구현하려고하지만 몇 가지 문제가 있습니다. 나는이를 컴파일하고 실행할 때, 어떤 도구 설명이JTable의 JToolTip - 표시되지 않습니다.

http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableToolTipsDemoProject/src/components/TableToolTipsDemo.java

public class test extends JPanel { 
    private boolean DEBUG = false; 
    protected String[] columnToolTips = {null, 
             null, 
             "The person's favorite sport to participate in", 
             "The number of years the person has played the sport", 
             "If checked, the person eats no meat"}; 

    public test() { 
     super(new GridLayout(1,0)); 

     JTable table = new JTable(new MyTableModel()) { 

      //Implement table cell tool tips. 
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 
       int realColumnIndex = convertColumnIndexToModel(colIndex); 

       if (realColumnIndex == 2) { //Sport column 
        tip = "This person's favorite sport to " 
          + "participate in is: " 
          + getValueAt(rowIndex, colIndex); 
       } else if (realColumnIndex == 4) { //Veggie column 
        TableModel model = getModel(); 
        String firstName = (String)model.getValueAt(rowIndex,0); 
        String lastName = (String)model.getValueAt(rowIndex,1); 
        Boolean veggie = (Boolean)model.getValueAt(rowIndex,4); 
        if (Boolean.TRUE.equals(veggie)) { 
         tip = firstName + " " + lastName 
           + " is a vegetarian"; 
        } else { 
         tip = firstName + " " + lastName 
           + " is not a vegetarian"; 
        } 
       } else { 
        //You can omit this part if you know you don't 
        //have any renderers that supply their own tool 
        //tips. 
        tip = super.getToolTipText(e); 
       } 
       return tip; 
      } 

      //Implement table header tool tips. 
      protected JTableHeader createDefaultTableHeader() { 
       return new JTableHeader(columnModel) { 
        public String getToolTipText(MouseEvent e) { 
         String tip = null; 
         java.awt.Point p = e.getPoint(); 
         int index = columnModel.getColumnIndexAtX(p.x); 
         int realIndex = columnModel.getColumn(index).getModelIndex(); 
         return columnToolTips[realIndex]; 
        } 
       }; 
      } 
     }; 

     table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
     table.setFillsViewportHeight(true); 

     //Create the scroll pane and add the table to it. 
     JScrollPane scrollPane = new JScrollPane(table); 

     //Add the scroll pane to this panel. 
     add(scrollPane); 
    } 

    class MyTableModel extends AbstractTableModel { 
     private String[] columnNames = {"First Name", 
             "Last Name", 
             "Sport", 
             "# of Years", 
             "Vegetarian"}; 
     private Object[][] data = { 
     {"Kathy", "Smith", 
     "Snowboarding", new Integer(5), new Boolean(false)}, 
     {"John", "Doe", 
     "Rowing", new Integer(3), new Boolean(true)}, 
     {"Sue", "Black", 
     "Knitting", new Integer(2), new Boolean(false)}, 
     {"Jane", "White", 
     "Speed reading", new Integer(20), new Boolean(true)}, 
     {"Joe", "Brown", 
     "Pool", new Integer(10), new Boolean(false)} 
     }; 

     public int getColumnCount() { 
      return columnNames.length; 
     } 

     public int getRowCount() { 
      return data.length; 
     } 

     public String getColumnName(int col) { 
      return columnNames[col]; 
     } 

     public Object getValueAt(int row, int col) { 
      return data[row][col]; 
     } 

     /* 
     * JTable uses this method to determine the default renderer/ 
     * editor for each cell. If we didn't implement this method, 
     * then the last column would contain text ("true"/"false"), 
     * rather than a check box. 
     */ 
     public Class getColumnClass(int c) { 
      return getValueAt(0, c).getClass(); 
     } 

     /* 
     * Don't need to implement this method unless your table's 
     * editable. 
     */ 
     public boolean isCellEditable(int row, int col) { 
      //Note that the data/cell address is constant, 
      //no matter where the cell appears onscreen. 
      if (col < 2) { 
       return false; 
      } else { 
       return true; 
      } 
     } 

     /* 
     * Don't need to implement this method unless your table's 
     * data can change. 
     */ 
     public void setValueAt(Object value, int row, int col) { 
      if (DEBUG) { 
       System.out.println("Setting value at " + row + "," + col 
            + " to " + value 
            + " (an instance of " 
            + value.getClass() + ")"); 
      } 

      data[row][col] = value; 
      fireTableCellUpdated(row, col); 

      if (DEBUG) { 
       System.out.println("New value of data:"); 
       printDebugData(); 
      } 
     } 

     private void printDebugData() { 
      int numRows = getRowCount(); 
      int numCols = getColumnCount(); 

      for (int i=0; i < numRows; i++) { 
       System.out.print(" row " + i + ":"); 
       for (int j=0; j < numCols; j++) { 
        System.out.print(" " + data[i][j]); 
       } 
       System.out.println(); 
      } 
      System.out.println("--------------------------"); 
     } 
    } 

    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event-dispatching thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("TableToolTipsDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Create and set up the content pane. 
     JComponent newContentPane = new test(); 
     newContentPane.setOpaque(true); //content panes must be opaque 
     frame.setContentPane(newContentPane); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

을 표시되지 않습니다 : 나는 다음과 같은 링크를 수행하는 방법의 신탁 예를 발견하셨습니까?

좋은 것입니다 이유에 어떤 도움,

감사합니다.

+3

P1 링크를 제거하고 직접 시도한 코드를 업데이트하십시오. 복사하여 붙여 넣을 때 뭔가 빠졌을 수 있습니다. – vels4j

+2

코드를 공유하십시오 – NoNaMe

+0

게시 됨, 정확히 동일합니다. – user1857900

답변

1

(2,4-) 그리고 헤더의 경우 배열이 columnToolTips인데 여기서 3,4,5 lumns가 지정됩니다.

그럼, 코드가 잘 작동하고 있습니다. 적절한 변경을하면 좋을 것입니다.

1

표시된 코드는 코드에서 언급 한 것과 정확히 일치합니다. 나는이 코드를 시도했으며 3, 5 번째 열 셀과 3, 4, 5 번째 열 머리글에 대한 툴팁을 보여줍니다.

참조 코드 :

columnToolTips = {null, 
           null, 
           "The person's favorite sport to participate in", 
           "The number of years the person has played the sport", 
           "If checked, the person eats no meat"}; 

if (realColumnIndex == 2) { //Sport column 
      tip = "This person's favorite sport to " 
        + "participate in is: " 
        + getValueAt(rowIndex, colIndex); 
     } else if (realColumnIndex == 4) { //Veggie column 
      TableModel model = getModel(); 
      String firstName = (String)model.getValueAt(rowIndex,0); 
      String lastName = (String)model.getValueAt(rowIndex,1); 
      Boolean veggie = (Boolean)model.getValueAt(rowIndex,4); 
      if (Boolean.TRUE.equals(veggie)) { 
       tip = firstName + " " + lastName 
         + " is a vegetarian"; 
      } else { 
       tip = firstName + " " + lastName 
         + " is not a vegetarian"; 
      } 
     } else { 
      //You can omit this part if you know you don't 
      //have any renderers that supply their own tool 
      //tips. 
      tip = super.getToolTipText(e); 
     } 

하고 코드 getToolTipText() 방법은 즉 선택적 열에 대한 툴팁을 반환에 따라

return new JTableHeader(columnModel) { 
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       //System.out.println(p); 
       int index = columnModel.getColumnIndexAtX(p.x); 
       int realIndex = columnModel.getColumn(index).getModelIndex(); 
       return columnToolTips[realIndex]; 
      } 
     }; 
+0

내 컴퓨터 여야합니다. 얼마나 이상합니다. – user1857900