Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable выделить ячейку 2-й кнопкой мыши 
V
    Опции темы
soulcub
Дата 20.5.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: 2
Всего: 2



В принципе это и есть вопрос. Поставил на таблицу JPopupMenu и хочу, чтоб перед тем как менюшка вылазит, выделить ячейку, по которой нажал 2-й кнопкой мыши.
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
pathfinder
Дата 20.5.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 7
Всего: 10



Код

jTable1.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        if (SwingUtilities.isRightMouseButton(e)) {
            int row = jTable1.rowAtPoint(e.getPoint());
            int column = jTable1.columnAtPoint(e.getPoint());
            if (row >= 0 && column >= 0) {
                ((JTable)e.getSource()).changeSelection(row, column, false, false);
            }
        }
    }
});

PM MAIL   Вверх
soulcub
Дата 20.5.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: 2
Всего: 2



Блин, Вы мне прям сегодня помогаете во всём) Было бы 100 постов - поставил бы + ) Всё работает, спасибо, только почему-то когда выплывает PopupMenu, выделение именно ячейки убирается( Она то выделена, всё ссылается на неё, но почему-то графически выделение убегает( В принципе и так норм, но всё же...) Вдруг знаете)

Или лучше, как выделить всю колонку каким-то цветом другим?) Сейчас сам попробую поискать, напишу если найду) Или даже не цветом, а чтоб хотя бы видно хоть как-то было, какая колонка активна сейчас.. Пытался сделать
Код

 ((JTable)e.getSource()).setColumnSelectionAllowed(false);
 не то(

Это сообщение отредактировал(а) soulcub - 20.5.2010, 19:08
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
pathfinder
Дата 20.5.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 7
Всего: 10



Это нормальное поведение. При показе JPopupMenu "фокус ввода" у ячейки проподает поэтому синяя граница у ячейки и не отрисовывается. Впринцыпе можно пошаманить с методом JTable.prepareRenderer().

Код

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class JVingradExample extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JVingradExample().setVisible(true);
            }
        });
    }

    public JVingradExample() {
        super("Vingrad Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPopupMenu popupMenu = new JPopupMenu("PopupMenu");
        popupMenu.add(new JMenuItem("MenuItem1"));
        popupMenu.add(new JMenuItem("MenuItem2"));
        popupMenu.add(new JMenuItem("MenuItem3"));

        JTable table = new JTable(new DefaultTableModel(new String[]{"A", "B", "C", "D", "E"}, 10)) {
            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Object value = getValueAt(row, column);

                boolean isSelected = false;
                boolean hasFocus = false;

                boolean isTemporaryFocusLost = popupMenu.isVisible();

                // Only indicate the selection and focused cell if not printing
                if (!isPaintingForPrint()) {
                    isSelected = isCellSelected(row, column);

                    boolean rowIsLead =
                        (selectionModel.getLeadSelectionIndex() == row);
                    boolean colIsLead =
                        (columnModel.getSelectionModel().getLeadSelectionIndex() == column);

                    hasFocus = (rowIsLead && colIsLead) && (isTemporaryFocusLost || isFocusOwner());
                }

                return renderer.getTableCellRendererComponent(this, value,
                                                              isSelected, hasFocus,
                                                              row, column);
            }
        };
        table.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                JTable table = (JTable) e.getSource();
                if (SwingUtilities.isRightMouseButton(e)) {
                    int row = table.rowAtPoint(e.getPoint());
                    int column = table.columnAtPoint(e.getPoint());
                    if (row >= 0 && column >= 0) {
                        if (table.isEditing() && !table.getCellEditor().stopCellEditing()) {
                            return ;
                        }
                        table.changeSelection(row, column, false, false);
                    }
                }
                showPopupMenu(e);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                showPopupMenu(e);
            }

            void showPopupMenu(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    popupMenu.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });

        add(new JScrollPane(table));
        pack();
        setLocationRelativeTo(null);
    }

}


Код метод prepareRenderer полностью взят из исходников Swing-а.
PM MAIL   Вверх
soulcub
Дата 20.5.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.2.2010
Где: Винница, Украина

Репутация: 2
Всего: 2



Спасибо за помощь)
--------------------
Так давай же, поспеши!Отыскать СВОЙ куб души!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.