Как вернуть фактические границы компонентов ячейки в JTable? - PullRequest
0 голосов
/ 02 декабря 2008

У меня есть пользовательский рендер в JTable для отображения Jcheckboxes для логических значений. Однако это вызывает небольшую проблему, потому что когда пользователь щелкает в ячейке таблицы, но не в флажке, флажок по-прежнему установлен.

Есть ли способ, которым я могу вернуть границы фактического JCheckbox, отображаемого JTable в определенной точке, чтобы я мог определить, находится ли щелчок в пределах границ JCheckbox?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 02 декабря 2008

Изменение состояния флажка является обязанностью редактора, а не средства визуализации. Если вы используете DefaultCellEditor , вам не нужно писать собственный код.

Я могу ошибаться, но я думаю, что это поведение по умолчанию для любого столбца, который имеет тип Boolean.class (как определено в TableModel). Поэтому вам не нужно писать какой-либо код рендеринга / редактирования, просто убедитесь, что ваша модель возвращает правильный тип столбца, и столбец будет отображаться как флажки и редактироваться с флажками.

РЕДАКТИРОВАТЬ: Может быть, я был смущен тем, что вы спрашивали. Увидев комментарий Павла по этому вопросу, я должен согласиться с тем, что флажок должен быть переключен, если вы щелкнете в любом месте ячейки таблицы.

0 голосов
/ 02 декабря 2008

Если вы используете JCheckBox в качестве компонента, возвращенного из TableCellEditor, то он будет растянут, чтобы соответствовать или что-то еще (он не указан). Итак, очевидная вещь, которую нужно сделать, это поместить ее в JPanel, и это позволит растянуть его, оставляя способ выделения пространства для LayoutManager по вашему выбору.

0 голосов
/ 02 декабря 2008

Я на самом деле только что сделал то же самое сегодня днем.

Вот мой трюк для JTree. Мой флажок находится справа справа или в ряду.

public void mouseClicked(MouseEvent e) {

int x = e.getX();
int y = e.getY();
int row = getRowForLocation(x, y);

Rectangle rect = getRowBounds(row);
Rectangle rect2 = new Rectangle(rect.x, rect.y, rect.height + 2, rect.height);
if (rect2.contains(x, y)) ....  // The click is on the checkbox
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...