java - 禁用的 JTable 上的手形光标

标签 java swing jtable jcomponent mouse-cursor

我在 JScrollPane 中有一个 JTable,使用 enabled(false) 禁用了它,但是我仍然想换成手鼠标悬停。我试过简单地手动设置表格的光标:

table.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

我已经尝试覆盖 JTable 的 getCursor() 方法:

JTable table = new JTable(tableModel){
   @Override
   public Cursor getCursor() {
       return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); //DOESNT WORK
   }
};

然而,这两种技术都不起作用。我必须使用的一种方法是向整个表添加一个mouseMotionListener,但是这个问题是在实际应用程序中按下驻留在表中的按钮会导致“JOptionpane”显示;如果用户继续将光标移出表格并关闭“JOptionPane”,则可能会出现错误。 “MouseMotionListener”肯定是过度的..?

我也研究过重写 JTable(以及随后的 Component)的 setEnabled 方法,但是我正在努力找出哪个代码防止显示手形光标。任何帮助将非常感激!代码如下:

import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class TableCursorTest {
    public TableCursorTest(){
        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        String[] headers = {"Items"};
        Object[][] data = new Object[][]{{"item 1"},{"item 2"}};
        DefaultTableModel tableModel = new DefaultTableModel(data, headers);

        @SuppressWarnings("serial")
        @Override
           public Cursor getCursor() {
                return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); //DOESNT WORK
           }
        };

        JScrollPane scrollPane = new JScrollPane(table);
        table.setEnabled(false);
        table.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //DOESNT WORK


        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.weightx = 0;
        constraints.weighty = 0;
        panel.add(scrollPane, constraints);

        frame.setContentPane(panel);
        frame.setPreferredSize(new Dimension(500,500));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

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

}

更新: 抱歉,问题缺少一些信息:表格并不总是填充滚动 Pane ,因此设置滚动 Pane 的手形光标会导致手形光标位于不存在的行上。如果可能,手形光标应仅出现在表格的行上方。

最佳答案

table.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //DOESNT WORK

同时..

scrollPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //DOES WORK

关于java - 禁用的 JTable 上的手形光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26777482/

相关文章:

java - Java 中是否有像 C++ 那样的成员初始化列表语法?

java - 如何创建文件夹列表

java - JTextArea getColumns、getRows 返回 0

java - 将鼠标悬停在 jtable 单元格上时显示图像

java - 如何为 JTable 中的特定列编写焦点获得事件?

java - JComboBox 在 JTable TableHeader 中展开失败

java - 在网格对象中选择后,getItem() 使用 SQLContainer 返回 null,但该行存在

java - Mock Mule JavaComponent

Java Try With Resources 不适用于赋值?

java - 将 JPanel 内的组件居中