JTable.SetCursor не меняет курсор - PullRequest
1 голос
/ 11 октября 2011

Я создал таблицу и установил курсор на определенный столбец. Курсор отображается правильно при первом отображении таблицы, но если модель таблицы изменяется и таблица перерисовывается, курсор не отображается в соответствии с кодом, вместо этого курсор по умолчанию отображается во всех столбцах.

Попытка отладки кода, вызов jtable.setcursor выполняется правильно, но курсор не отображается на экране.

Установите курсор через MouseMotionListener внутри метода MouseMoved ().

Любая помощь приветствуется.


Мои последние наблюдения:

Я обнаружил, что проблема возникает, когда любой другой диалог появляется над полосой прокрутки, которая отображает таблицу. Если JFileChooser или JDialog запускается поверх панели, содержащей JScrollPane для JTable, после закрытия JFileChooser или JDialog курсор на таблице не отображается в соответствии с кодом, это происходит даже в том случае, если модель таблицы вообще не изменяется.

Ниже приведен мой код для установки курсора:

final Cursor handCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
final Cursor defaultCursor = Cursor.getDefaultCursor();
table.addMouseMotionListener(new MouseAdapter() 
{
    public void mouseMoved(MouseEvent e) 
    {
        int cModel = table.columnAtPoint(e.getPoint());
        int cView = table.convertColumnIndexToView(cModel);
        if (cView == 1)
        {
            table.setCursor(handCursor);                             
        }
        else
        {
            table.setCursor(defaultCursor);
        }
    }
});

Ответы [ 3 ]

1 голос
/ 11 октября 2011
Have set cursor through MouseMotionListener inside MouseMoved() method.

нет, я думаю, что есть причина для этого

Вы можете решить это

1) определить Cursor для JScrollPane#setCursor(), если вам нужно воссоздать JTable из его Model

2) прекратить воссоздание JTable (из вашего TableModel) внутри вашего кода,

3) пример для JTable и Cursor здесь

1 голос
/ 12 октября 2011

Я не установил владельца JFileChooser / Jdialog на базовую панель.Следовательно, когда эти компоненты подошли, была создана новая иерархия, и все операции рисования начались в этой новой иерархии (что-то вроде этого, но я не слишком уверен).

Когда я устанавливаю владельца дополнительных панелейв качестве главной панели, при размещении этих вторичных панелей, измененный курсор снова начал появляться на главной панели (возможно, из-за того, что теперь присутствовала единственная наемная краска).

1 голос
/ 11 октября 2011

Может быть, когда модель меняет столбцы, также меняется модель и старый экземпляр столбца больше не действителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...