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であることが判明した場合は申し訳ありません。

4

2 に答える 2

1

まず始めに、左ボタンは通常 で表されMouseEvent.BUTTON1、次に move MouseEvent#getModifiersto は通常、現在押されているキーに関する情報を提供するために使用され、主要な問題が見え始めます。

あなたが本当に望む方法は、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);
                    }
                }
            });

        }

    }

}
于 2012-10-30T22:26:44.550 に答える
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;                                                                                    
     } 
}
于 2012-10-30T22:29:26.297 に答える