禁用JTable上的弹出菜单

时间:2011-02-09 22:12:39

标签: java swing jtable

我正在使用popop菜单创建一个这样的表

JTable table = new Table()

table.addMouseListener( new MouseAdapter()
{
    public void mouseReleased(MouseEvent e)
    {
        if (e.isPopupTrigger())
        {
            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);

            popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
});

我希望能够通过电话启用/禁用此菜单,我试过这个:

table.setEnabled(假)

但菜单仍然弹出。我该怎么办?

2 个答案:

答案 0 :(得分:1)

好吧,你可能不得不将其删除为听众。所以,将它保存为类中的成员变量,如下所示:

private MouseAdapter adapt;

您的其他代码将变为:

adapt = new MouseAdapter()
{
    public void mouseReleased(MouseEvent e)
    {
        if (e.isPopupTrigger())
        {
            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);

            popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
});

table.addMouseListener(adapt);

然后,你的电话会是这样的:

public void disableTableMenu() {
    table.removeMouseListener(adapt);
}

另外,要重新添加,您可以拥有以下内容:

public void enableTableMenu() {
    table.addMouseListener(adapt);
}

答案 1 :(得分:1)

您可以在创建名为tableMenuEnabled的表的类中包含一个布尔值。您应该能够将tableMenuEnabled设置为true或false,而您计划调用table.setEnabled(false)。从那里你的代码将变为:

table.addMouseListener( new MouseAdapter()
{
    public void mouseReleased(MouseEvent e)
    {
        if (tableMenuEnabled && e.isPopupTrigger())
        {
            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);

            popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
});