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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка действий мышки! ??? 
V
    Опции темы
Bulat
Дата 13.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Вообщем отсюда все начинается, но это так для общей картины(чтоб понятнее было), здесь значится есть JPopupMenu для таблицы, проблема далее

Код

public class MainForm extends JFrame{
    private JTable t;
    private JPanel p, pW, pS, pC, pN, pE;
    private JPopupMenu pm;
...

    public MainForm(String s) {
        super(s);
        Container c = getContentPane();
        c.setBackground(Color.white);
        c.setLayout(new GridLayout());

        p = new JPanel();
        p.setLayout(new BorderLayout());
        p.setBorder(BorderFactory.createEtchedBorder());

...
            pC = new JPanel();
            pC.setLayout(new BoxLayout(pC, BoxLayout.Y_AXIS));
            pC.setBorder(BorderFactory.createEtchedBorder());

            t = new JTable();
            t.getTableHeader().setReorderingAllowed(false);
            JScrollPane sp = new JScrollPane(t);

            pC.add(sp);

            pC.setVisible(false);

        p.add(pC, BorderLayout.CENTER);

...

        pm = new JPopupMenu();

        c.add(p);

        t.addMouseListener(new MouseClick(t, pm));

        setSize(900,700);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}


Вот тут значится выпадает этот JPopupMenu, и как бы я навешиваю обрабоку действий при нажатии на один из пунктов(далее)

Код

public class MouseClick implements MouseListener {
    private JTable t;
    private JPopupMenu pm;
    private JMenuItem mi1, mi2, mi3;
    private Object userId, loginId;

    public MouseClick(JTable t, JPopupMenu pm) {
        this.t = t;
        this.pm = pm;
        mi1 = new JMenuItem();
        mi2 = new JMenuItem();
        mi3 = new JMenuItem();
        mi1.setText("Просмотреть платежи");
        mi2.setText("Просмотреть статистику");
        mi3.setText("Просмотреть акты");
        pm.add(mi1);
        pm.add(mi3);
        pm.add(mi2);
    }

    public void mouseClicked(MouseEvent evt) {
        if (evt.getButton() == evt.BUTTON3) {

            int column = t.columnAtPoint(new Point(evt.getX(), evt.getY()));
            int row = t.rowAtPoint(new Point(evt.getX(), evt.getY()));

            int selRows  = t.getSelectedRow();
            int selColumns = t.getSelectedColumn();

            if ( (selColumns == column) && (selRows == row)) {
                pm.show(t, evt.getX(), evt.getY() );
                userId = t.getValueAt(row, 0);
                loginId = t.getValueAt(row, 2);
                mi1.addMouseListener(new Item1Click(userId, loginId));
            }
        }

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }
}


Вот тут при нажатии на первый пункт как бы вызываю новый диалог. И тут проблемка, при нажатии кнопки Cancel один JDialog(ShowStatistic) исчезает и появляется другой такой же, потом если нажать там Cancel то закрывается и все. Но еще интересней если попытатся повторить это, то этот JDialog появляется четыре раза, при третьей попытке шесть раз соответственно smile 

Код

public class Item1Click extends JFrame implements MouseListener {
    private Object userId;
    private Object loginId;

    public Item1Click(Object userId, Object loginId) {
        this.loginId = loginId;
        this.userId = userId;
    }

    public void mousePressed(MouseEvent evt) {
        if (evt.getButton() == evt.BUTTON1) {
            ShowStatistic ss = new ShowStatistic(this, true);
            ss.setLocationRelativeTo(this);
            ss.setVisible(true);
            if (ss.getExitState() == ss.EXIT_CANCEL) return;
        }
    }

    public void mouseClicked(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

}


На всякий случай класс ShowStatistic(), но здесь вроде бы проблем нет.

Код

public class ShowStatistic extends JDialog {
    private JPanel p, pN, pC, pS;
    private JComboBox cbM, cbY;
    private JTable t;
    public static int EXIT_SAVE = 1;
    public static int EXIT_CANCEL = 0;
    private int exit_state = this.EXIT_CANCEL;

    public ShowStatistic(Frame parent, boolean modal) {
        super(parent, modal);
        Container c = getContentPane();
        c.setBackground(Color.white);
        c.setLayout(new GridLayout());

        p = new JPanel();
        p.setLayout(new BorderLayout());
        p.setBorder(BorderFactory.createEtchedBorder());

...

            pS = new JPanel();
            pS.setLayout(new FlowLayout(FlowLayout.RIGHT));
            pS.setBorder(BorderFactory.createEtchedBorder());

            JButton bSScancel = new JButton("Отмена");
            pS.add(bSScancel);

        p.add(pS, BorderLayout.SOUTH);

        bSScancel.addActionListener(new ButtonSSCancel());

        c.add(p);

        setSize(400,300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    class ButtonSSCancel implements ActionListener {
        public void actionPerformed(ActionEvent ae) {
            exit_state = EXIT_CANCEL;
            dispose();
        }
    }

    public int getExitState() {
        return exit_state;
    }

}


Ну вот в принципе  smile  


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ShamanTrirukiy
Дата 13.6.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.4.2006
Где: Харьков

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



Ты и так дважды показываешь диалог -  
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
setVisible(true);

в его конструкторе и
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
ss.setVisible(true);

в методе 
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
mousePressed(MouseEvent evt)
 класса 
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
Item1Click

Далее. В методе 
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
mouseClicked(MouseEvent evt)
 класса 
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
MouseClick
 ты делаешь следующее:
Цитата(Bulat @  13.6.2006,  13:52 Найти цитируемый пост)
 if ( (selColumns == column) && (selRows == row)) {
                pm.show(t, evt.getX(), evt.getY() );
                userId = t.getValueAt(row, 0);
                loginId = t.getValueAt(row, 2);
                mi1.addMouseListener(new Item1Click(userId, loginId));
            }

т. е. при каждом клике ты добавляешь ещё одного MouseListener-а, каждый из которых показывает диалог (в данном случае - дважды), а т.к. предыдущий MouseListener не убирается, то и получается 2, 4, 6, 8 и т.д. показанных диалогов
 
PM MAIL   Вверх
Bulat
Дата 13.6.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



ShamanTrirukiy

Пасиба, расслабился я что-то после продолжительных выходных, как-то самому даже стыдно стало, что проблемы такие простые, а я поленился додумать smile  


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1035 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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