2012-10-30 53 views
1

我的表格有4列,我只希望列1被允許點擊。此外,此代碼還允許使用左鍵鼠標按鈕,我只想要右鍵。檢測鼠標右鍵何時被點擊

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) { 
    // TODO add your handling code here: 
    int iCol = jTable1.getSelectedColumn(); 

    if(iCol == 1 && evt.getModifiers() == InputEvent.BUTTON3_MASK) 
    { 
     if(evt.getClickCount() == 2) 
     { 
      int iRow = jTable1.getSelectedRow(); 

      File iFile = new File(jTable1.getValueAt(iRow, iCol).toString()); 

      String iPath = iFile.getAbsolutePath(); 
      File iDir = new File(iPath.substring(0, iPath.lastIndexOf(File.separator))); 

      if(Desktop.isDesktopSupported()) { 
       try { 
        Desktop.getDesktop().open(iDir); 
       } catch (IOException ex) { 
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     } 
    } 
} 

我很抱歉,如果這個問題被證明爲2

+0

是不是左鍵正常'InputEvent.BUTTON1_MASK'功能? – MadProgrammer

+0

爲什麼?你已經檢查了'iCol == 1'。無論如何。您可以通過[setSelectionModel()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setSelectionModel(javax.swing.ListSelectionModel))控制特定行中的選擇。 ,但我不知道如何控制列。 – ignis

+0

@ignis我認爲OP更感興趣的只是對列1進行雙擊而不是限制選擇。但是你應該可以使用'ColumnModel'的選擇模型來控制列的選擇;) – MadProgrammer

回答

1

關於點擊唯一的特定列:

1.創建表使用你自己的模型。

final JTable table = new JTable(new MyTableModel(data, columnNames)); 


2.創建新模型覆蓋,你需要(即的isCellEditable)

public class MyTableModel extends DefaultTableModel { 

    private static final long serialVersionUID = -8422360723278074044L; 

    MyTableModel(Object[][] data, Object[] columnNames)  
    { 
     super(data,columnNames); 
    } 

    public boolean isCellEditable(int row,int cols) 
    { 
     if(cols==1){return true;} 
      return false;                      
    } 
} 
+0

感謝您的回覆,我在java中超級新,我不確定在哪裏放置最終的JTable表=新的JTable(新的MyTableModel(data,columnNames));'。不會創建一個新表嗎?我已經在編輯器中創建了一個。以下是我如何設置模型:'DefaultTableModel模型;對象columnNames [] = {「名稱」,「路徑」,「上次修改」,「大小」}; model = new DefaultTableModel(columnNames,0); jTable1.setModel(model);'將'DefaultTableModel'替換爲'MyTableModel'會產生錯誤。 – user1667191

+0

將其更改爲'MyTableModel(Object [] columnNames,int data) { super(columnNames,data); }'似乎工作。 – user1667191

1

讓我們開始,左鍵通常由MouseEvent.BUTTON1表示,則移動到MouseEvent#getModifiers通常用於提供有關哪些鍵是當前信息我們開始看到主要問題。

你真正想用的方法MouseEvent#getButton

嘗試運行一些想法,下面的例子中)

public class TestMouseClicked { 

    public static void main(String[] args) { 
     new TestMouseClicked(); 
    } 

    public TestMouseClicked() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new MousePane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class MousePane extends JPanel { 

     private JToggleButton leftButton; 
     private JToggleButton middleButton; 
     private JToggleButton rightButton; 

     public MousePane() { 
      setLayout(new GridBagLayout()); 

      leftButton = new JToggleButton("Left"); 
      middleButton = new JToggleButton("Middle"); 
      rightButton = new JToggleButton("Right"); 

      add(leftButton); 
      add(middleButton); 
      add(rightButton); 

      ButtonGroup bg = new ButtonGroup(); 
      bg.add(leftButton); 
      bg.add(middleButton); 
      bg.add(rightButton); 

      addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        System.out.println(e.getButton()); 
        if (e.getButton() == MouseEvent.BUTTON1) { 
         leftButton.setSelected(true); 
        } else if (e.getButton() == MouseEvent.BUTTON2) { 
         middleButton.setSelected(true); 
        } else if (e.getButton() == MouseEvent.BUTTON3) { 
         rightButton.setSelected(true); 
        } 
       } 
      }); 

     } 

    } 

}