【问题标题】:How to get the value of a JTable cell with a right mouse click如何通过鼠标右键单击获取 JTable 单元格的值
【发布时间】:2015-04-17 15:56:01
【问题描述】:

我在我的 Java Swing 应用程序中有一个 JTable,并且总体上一切正常。我在JTable 上添加了MouseListener,因此每当我尝试右键单击表中的一行时,我都可以捕获事件并运行一个方法。但是,我想做的是

  • 选择单元格
  • 得到它的价值
  • 然后调用方法。

为此,我当前必须左键单击该行,然后右键单击它。是否可以通过单击鼠标右键立即选择行/单元格?

到目前为止,这是我的代码:

public class MyMouseAdapterTableArticoli extends MouseAdapter {
    public void mouseClicked(MouseEvent me) {
        JTable t = (JTable)me.getSource();
        JMenuItem menuItem;
        rowPopUp = t.rowAtPoint(me.getPoint());
        if ((me.getClickCount() == 2) && (me.getButton() == MouseEvent.BUTTON1)) {
            pulisciTableArtRappre();
            if((listaMagazzino != null) && (listaMagazzino.size() > 0)) {
                pulisciTableArtMagazzino();
            }
            popolaCampi(rowPopUp);
        } else if (me.getButton() == MouseEvent.BUTTON3) {
            JPopupMenu popup = new JPopupMenu();
            menuItem = new JMenuItem("Mostra Prezzi di Acquisto");
            menuItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    mostraPrezziAcquisto(rowPopUp); 
                }//fine metodoVoid
            });//fine actionlistener 
            popup.add(menuItem);

            MouseListener popupListener = new PopupListener(popup);
            table.addMouseListener(popupListener);

        }//fine else e if
    }

public void mousePressed(MouseEvent e) {
    JTable source = (JTable)e.getSource();
    int row = source.rowAtPoint(e.getPoint());
    int column = source.columnAtPoint(e.getPoint());

    if (!source.isRowSelected(row)) {
        source.changeSelection(row, column, false, false);
    }
}

【问题讨论】:

    标签: java swing jtable right-click


    【解决方案1】:
    table.addMouseListener( new MouseAdapter()
    {
        public void mousePressed(MouseEvent e)
        {
            JTable source = (JTable)e.getSource();
            int row = source.rowAtPoint( e.getPoint() );
            int column = source.columnAtPoint( e.getPoint() );
    
            if (! source.isRowSelected(row))
                source.changeSelection(row, column, false, false);
        }
    });
    

    编辑:

    在学习新概念时创建一个简单的示例。例如:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class SSCCE extends JPanel
    {
        public SSCCE()
        {
            JTable table = new JTable(15, 5);
            add( new JScrollPane(table) );
    
            table.addMouseListener( new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    JTable source = (JTable)e.getSource();
                    int row = source.rowAtPoint( e.getPoint() );
                    int column = source.columnAtPoint( e.getPoint() );
    
                    if (! source.isRowSelected(row))
                        source.changeSelection(row, column, false, false);
                }
            });
        }
    
        private static void createAndShowGUI()
        {
            JFrame frame = new JFrame("SSCCE");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new SSCCE(), BorderLayout.NORTH);
            frame.setLocationByPlatform( true );
            frame.pack();
            frame.setVisible( true );
        }
    
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
        }
    }
    

    【讨论】:

    • @mKorbel,我更喜欢使用侦听器,而不是使用自定义代码扩展类。这段代码可以作为一个单独的类来实现,然后你可以添加到任何你想要的 JTable 中。
    • 我已经在我的代码中插入了你的代码,但是问题是一样的。如果我尝试在我的表上单击鼠标右键,现在选择了行并且没问题,但是这段代码:table.rowAtPoint(me.getPoint());结果不行。为了访问工作,我必须左键单击该列,然后右键单击。
    • @bircastri,您需要在创建表时将 MouseListener 添加到表中。见编辑。
    • 我在这种模式下添加 MouseListener:table.addMouseListener(new MyMouseAdapterTableArticoli());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多