2012-04-03 10 views
4

JTableの列ヘッダーにActionListenerを追加することは可能ですか?JTableの列ヘッダーにActionListenerを追加

はここMy table image

は今、私は別のウィンドウで列の説明を表示できるようにしたい列のヘッダー(例えばWQESDM)にActionListenerを追加したい私のテーブルです。

+0

この[Q&A](http://stackoverflow.com/q/7137786/230513)も参照してください。 – trashgod

答えて

14

カラムヘッダにヘッダが

コードクリックされた列を見つけるため

  • 使用table.columnAtPoint()のMouseListenerを追加

    • 以下に完全に動作する例を参照してください。

      // example table with 2 cols 
      JFrame frame = new JFrame(); 
      final JTable table = new JTable(new DefaultTableModel(new String[] { 
           "foo", "bar" }, 2)); 
      frame.getContentPane().setLayout(
           new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); 
      frame.getContentPane().add(table.getTableHeader()); 
      frame.getContentPane().add(table); 
      frame.pack(); 
      frame.setVisible(true); 
      
      // listener 
      table.getTableHeader().addMouseListener(new MouseAdapter() { 
          @Override 
          public void mouseClicked(MouseEvent e) { 
           int col = table.columnAtPoint(e.getPoint()); 
           String name = table.getColumnName(col); 
           System.out.println("Column index selected " + col + " " + name); 
          } 
      }); 
      
  • +1

    +1これはチュートリアルで示唆されているアプローチであり[ここ](http://stackoverflow.com/a/7137801/230513)です。 – trashgod

    +0

    素晴らしい!ヘッダーにマウスを置いたイベントが、テーブルのイベントよりも優れていることはわかりませんでした.D – gumuruh

    1

    はい可能です。あなたはこのように列ヘッダーおよび細胞上の両方のマウスイベントを追加することができます。

    private class MyMouseAdapter extends MouseAdapter { 
    
        public void mousePressed(MouseEvent e) { 
    
         if (table.equals(e.getSource())) { 
    
          int colIdx = table.columnAtPoint(e.getPoint()); 
          int rowIdx = table.rowAtPoint(e.getPoint()); 
    Object obj = table.getModel().getValueAt(rowIdx, colIdx) ;//This gets the value in the cells 
          String str = obj.toString();//This converts that Value to String 
          JTextField somefield = new JTextField();//Choose a JTextField 
          somefield.setText(str);//Populates the Clicked value to the JTextField 
    
          System.out.println("Row: " + rowIdx + " " + "Colulmn: " + colIdx); 
         } 
         else if (header.equals(e.getSource())) { 
    
          int selectedColumnIdx = header.columnAtPoint(e.getPoint()); 
          String colName = table.getColumnName(header.columnAtPoint(e.getPoint())); 
    
          System.out.println("Column Name: " + colName); 
          System.out.println("Selected Column: " + selectedColumnIdx); 
         } 
        } 
    } 
    

    は、あなたの好みや好みに合わせてサンプルコードを修正します。

    +0

    ['ListSelectionListener'](http://docs.oracle.com/javase/tutorial/uiswing/components/table。 html#selection)をテーブル自体に追加します。ヘッダーリスナーは、@ Adamのずっと前の[answer](http://stackoverflow.com/a/9992631/230513)を繰り返します。 – trashgod

    関連する問題