Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Swing/прослушка событий / 24 сообщений из 24, страница 1 из 1
09.12.2013, 22:22:39
    #38494709
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
Добрый вечер!
Пост конечно огроменный, но еще больше код уменьшить не смог. Извиняюсь
В классе Btn создается фрэйм с двумя панелями через списки добавляем кнопки на панели
В класс Listener реализуется прослушка ивента, ну типо нажали на кfкую-nj кнопочку, какое-то действие должно выполниться..

вот проблема в том что правая панель прослушивается нормально , а на левой вылетает
NullPointerException

уже глаза замылились, но вроде с циклами и if-else все впорядке, компилятор тоже пропускает

вылетает и все...

и еще фишка, если прослушку поменять местами, то есть для правой панели поставить в if , а для левой в else if , то эксепшн уже будет вылетать для другой стороны.

короче что первое на прослушуке , то работает норм, а потом тухло

Прошу помощи, может кто увидит эту недоставленную скобку и тп...Самая гадкая ошибка

Спасибо!

Класс Btn [/b][/u]

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Btn extends JFrame {
    /*
     * константы
     * бла-бла-бла
     *  
     */

    private static JButton CLOSE_DOOR = new JButton("close");
    private static JButton OPEN_DOOR = new JButton("open");
    private static final int FLOOR_COUNT = 3;
    private static final int LIFT_COUNT = 1;
    private static final int LIFT_FRAME_HEIGHT = FLOOR_COUNT * 100;
    private static final int LIFT_FRAME_WEIGHT = LIFT_COUNT * 500;
    /*
     * списки кнопок левой и правой панели
     */
    private static ArrayList<JButton> listFloorButton;
    private static ArrayList<JButton> listCallButton;

    public static void drawLiftFrame() {

        JFrame liftFrame = new JFrame("Lift Frame");
        liftFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        /*
         * crate panel with buttons in lift
         */
        JPanel floorButtonPanel = new JPanel();

        /*
         * create button that move lift to the neccessary
         * ЛЕВАЯ ПАНЕЛЬ
         */
        setListFloorButton(new ArrayList<JButton>());
        for (int i = 0; i < FLOOR_COUNT; i++) {
            getListFloorButton().add(new JButton("ЛЕВАЯ ПАНЕЛЬ"));
        }
        for (int j = getListFloorButton().size() - 1; j >= 0; j--) {
            floorButtonPanel.add(getListFloorButton().get(j));
            getListFloorButton().get(j).addActionListener(new Listener());
        }
        /*
         * добавление кнопок на панель , а потом во фрейм кнопок
         */
        floorButtonPanel.setLayout(new GridLayout(FLOOR_COUNT + 2, 1));
        liftFrame.add(floorButtonPanel, BorderLayout.WEST);
        /*
         * create panel whith call lift buttons on the stage
         * Правая ПАНЕЛЬ
         */
        JPanel callButtonPanel = new JPanel();

        setListCallButton(new ArrayList<JButton>());
        for (int a = 0; a < FLOOR_COUNT * 2; a++) {
            getListCallButton().add(new JButton("ПРАВАЯ ПАНЕЛЬ"));
        }
        for (int b = getListCallButton().size() - 1; b >= 0; b--) {
            callButtonPanel.add(getListCallButton().get(b));
            getListCallButton().get(b).addActionListener(new Listener());
        }
        /*
         * добавление кнопок на панель , а потом во фрейм кнопок
         */
        callButtonPanel.setLayout(new GridLayout(FLOOR_COUNT, 2));
        liftFrame.add(callButtonPanel, BorderLayout.EAST);


        /*
         * параметры, размеры фрэйма
         */
        liftFrame.setPreferredSize(new Dimension(LIFT_FRAME_WEIGHT, LIFT_FRAME_HEIGHT));
        liftFrame.pack();
        liftFrame.setLocationRelativeTo(null);
        liftFrame.setVisible(true);

    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame.setDefaultLookAndFeelDecorated(true);
                drawLiftFrame();

            }
        });
    }

    /**
     * @return the CLOSE_DOOR
     */
    public static JButton getCLOSE_DOOR() {
        return CLOSE_DOOR;
    }

    /**
     * @param aCLOSE_DOOR the CLOSE_DOOR to set
     */
    public static void setCLOSE_DOOR(JButton aCLOSE_DOOR) {
        CLOSE_DOOR = aCLOSE_DOOR;
    }

    /**
     * @return the OPEN_DOOR
     */
    public static JButton getOPEN_DOOR() {
        return OPEN_DOOR;
    }

    /**
     * @param aOPEN_DOOR the OPEN_DOOR to set
     */
    public static void setOPEN_DOOR(JButton aOPEN_DOOR) {
        OPEN_DOOR = aOPEN_DOOR;
    }

    /**
     * @return the listFloorButton
     */
    public static ArrayList<JButton> getListFloorButton() {
        return listFloorButton;
    }

    /**
     * @param aListFloorButton the listFloorButton to set
     */
    public static void setListFloorButton(ArrayList<JButton> aListFloorButton) {
        listFloorButton = aListFloorButton;
    }

    /**
     * @return the listCallButton
     */
    public static ArrayList<JButton> getListCallButton() {
        return listCallButton;
    }

    /**
     * @param aListCallButton the listCallButton to set
     */
    public static void setListCallButton(ArrayList<JButton> aListCallButton) {
        listCallButton = aListCallButton;
    }
}



Класс Listener [/b][/u]
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package javaapplication30;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;

public class Listener implements ActionListener {

    private ArrayList<JButton> listenListFloorButton = Btn.getListFloorButton();
    private ArrayList<JButton> listenListCallButton = Btn.getListCallButton();


    @Override
    public void actionPerformed(ActionEvent e) {
       
        if (listenListCallButton.equals(Btn.getListCallButton())) {
            System.out.println( "прослушана ПРАВАЯ панель" + "\n");

        } else if (listenListFloorButton.equals(Btn.getListFloorButton())) {
            System.out.println( "прослушана ЛЕВАЯ панель" + "\n");
        } else {
            System.out.println("попал не по кнопке");
        }
    }
}
...
Рейтинг: 0 / 0
09.12.2013, 22:42:19
    #38494729
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,
Код: java
1.
2.
private ArrayList<JButton> listenListFloorButton = Btn.getListFloorButton();
if (listenListFloorButton.equals(Btn.getListFloorButton())


Я никак не пойму что вы тут пытаетесь проверить?
...
Рейтинг: 0 / 0
09.12.2013, 22:49:18
    #38494741
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker, мда глуповата констркуция =), согласен но почему-то не работает без начальньного присвоения .. то бишь вот так
Код: java
1.
2.
private ArrayList<JButton> listenListFloorButton ;
if (listenListFloorButton.equals(Btn.getListFloorButton())


с массивами , как ни странно работало
если убрать присвоение, то пять же вылетает налПоинтер
...
Рейтинг: 0 / 0
09.12.2013, 22:50:36
    #38494742
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
Почему с массивами работало, честно говоря не понимаю
хотя логике и противоречит это)
...
Рейтинг: 0 / 0
09.12.2013, 23:02:45
    #38494751
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021, я не о том что оно не работает, я спрашиваю что с чем и для чего вы сравниваете?
...
Рейтинг: 0 / 0
09.12.2013, 23:09:35
    #38494756
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
setListFloorButton(new ArrayList<JButton>());
        for (int i = 0; i < FLOOR_COUNT; i++) {
            getListFloorButton().add(new JButton("ЛЕВАЯ ПАНЕЛЬ"));
        }
        for (int j = getListFloorButton().size() - 1; j >= 0; j--) {
            floorButtonPanel.add(getListFloorButton().get(j));
            getListFloorButton().get(j).addActionListener(new Listener());
        }

Это вообще за рамками понимания. Вы где такое видели? Предлагаю начать не с кода, а с объяснения того, чего вы хотите добиться.
...
Рейтинг: 0 / 0
09.12.2013, 23:15:22
    #38494760
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
нажимается кнопка и надо определить ее принадлежность тому либо иному массиву, и в зависимости от этого выполнить какоелибо действие

для этого определяю в Listener два списка
Код: java
1.
2.
private ArrayList<JButton> listenListFloorButton;
 private ArrayList<JButton> listenListCallButton;


-----------
и через геттер и сеттер достаю списки из класса Btn, чтобы
сравнить co списками из класса Btn
вот этими
Код: java
1.
2.
 private static ArrayList<JButton> listFloorButton;
    private static ArrayList<JButton> listCallButton;
...
Рейтинг: 0 / 0
09.12.2013, 23:18:11
    #38494765
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
нигде не видел) пытался написать
а хочу я, в упрощенном варианте если говорить, создать фрэйм с двумя панелями "ЛЕВАЯ" и "ПРАВАЯ" .
Панели -это массивы кнопок, как одна так и другая.
и при нажатии на кнопку необходимо оперделить какому массивц принадлежит нажатая кнопка, ну и дальше выполнить уже какие-либо действия
...
Рейтинг: 0 / 0
09.12.2013, 23:21:03
    #38494771
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,

этот кусок кода всего лишь выводит кнопки в обратном порядке
...
Рейтинг: 0 / 0
09.12.2013, 23:21:50
    #38494773
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,и через геттер и сеттер достаю списки из класса Btn, чтобы
сравнить co списками из класса BtnВот прочитайте внимательно то что написали еще раз, а лучше два.
...
Рейтинг: 0 / 0
09.12.2013, 23:28:46
    #38494780
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker, извинясь, некорректно выразился.
списки из класса Listener
Код: java
1.
2.
private ArrayList<JButton> listenListFloorButton;
 private ArrayList<JButton> listenListCallButton;


необходимо сравнить со списками из класса Btn соответственно
Код: java
1.
2.
 private static ArrayList<JButton> listFloorButton;
  private static ArrayList<JButton> listCallButton;


которые достаются через геттеры
...
Рейтинг: 0 / 0
09.12.2013, 23:31:38
    #38494783
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021, вопрос. Чем эти списки будут отличаться?
...
Рейтинг: 0 / 0
09.12.2013, 23:40:22
    #38494786
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
эммм.... не понимаю вопроса, если честно.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 

//сравниваю списки
//если есть совпадение в одно случае то печатаем * прослушана ПРАВАЯ панель
if (listenListCallButton.equals(Btn.getListCallButton())) {
            System.out.println( "прослушана ПРАВАЯ панель" + "\n");
//если есть совпадение в другом случае то печатаем *прослушана ЛЕВАЯ панель
        } else if (listenListFloorButton.equals(Btn.getListFloorButton())) {
            System.out.println( "прослушана ЛЕВАЯ панель" + "\n");
        } else {
            System.out.println("попал не по кнопке");
        }
...
Рейтинг: 0 / 0
09.12.2013, 23:44:13
    #38494787
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
идет просто прослушивание события и если это событие принадлежит одному массиву кнопок, то выполняем одно днйствие,
если другому массиву, то выполняем другое действие
...
Рейтинг: 0 / 0
09.12.2013, 23:47:11
    #38494788
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
В код не вникал особо, почему не унаследоваться от JButton и не добавить поле Listener, сетать его в конструкторе например.
...
Рейтинг: 0 / 0
09.12.2013, 23:49:26
    #38494790
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,эммм.... не понимаю вопроса, если честно.Блин, что ж делать. Ок, вы создаете два листа кнопок в классе Btn, один раз, и больше не меняете нигде . В какой-то момент передаете ссылки на эти листы в ваш listener. И при нажатии на кнопку геттером забираете эти же ссылки и сравниваете ссылки сами с собой. Почему они должны начать различаться? Зачем вы это делаете?
...
Рейтинг: 0 / 0
09.12.2013, 23:50:45
    #38494792
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,идет просто прослушивание события и если это событие принадлежит одному массиву кнопок, то выполняем одно днйствие,
если другому массиву, то выполняем другое действиеНа минуточку, вы событие
Код: java
1.
ActionEvent e

вообще не анализируете.
...
Рейтинг: 0 / 0
09.12.2013, 23:52:36
    #38494794
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
забыл ник,

к сожалению, не представляю себе как эт осделать
да и, честно гворя, просто желания уж нету переписывать все с нуля...это уже четвертый раз будет)
есть рабочий вариант с массивами, но списки как-то привлекательней выглядят вот и пытаюсь через них реализовать, поэтому и ковыряюсь)
в люом случае спасибо за совет)
...
Рейтинг: 0 / 0
09.12.2013, 23:53:26
    #38494795
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,есть рабочий вариант с массивами
покажите
...
Рейтинг: 0 / 0
10.12.2013, 00:12:14
    #38494802
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker, по поводу кода с массивами , вы уверены что хотете это видеть? =)
понл, что вы хотели донести до меня
вот попробовал перделать Listener, но теперь точно не пойму почему не пашет

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Listener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        ArrayList<JButton> listenButton = (ArrayList) e.getSource();
        if (listenButton.equals(Btn.getListCallButton())) {
            System.out.println("прослушана ПРАВАЯ панель" + "\n");

        } else if (listenButton.equals(Btn.getListFloorButton())) {
            System.out.println("прослушана ЛЕВАЯ панель" + "\n");



        } else {
            System.out.println("попал не по кнопке");
        }


    }
}
...
Рейтинг: 0 / 0
10.12.2013, 00:15:29
    #38494803
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
хотя тут понятно что копилятор ругается на то что присваиваю массиву событие
...
Рейтинг: 0 / 0
10.12.2013, 00:22:05
    #38494808
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
alex021,понл, что вы хотели донести до меняПока непохоже. Вы вешаете слушатели на кнопки, а в качестве источника действия хотите получить лист кнопок. Объясните теперь, зачем сначала вешать на кнопки, которые должны обладать разным поведением, одинаковые слушатели, и уже в них разбираться что делать? Повесьте на левые кнопки один слушатель, который будет делать то что нужно левым, и на правые один по такому же принципу.
По поводу ошибки в вашем первом посте, она тут ни при чем, надо менять архитектуру. Но если интересно, левая панель кидала исключение потому, что слушателей для ее кнопок вы создавали до того как инициализировали правую панель, поэтому в этих слушателях listenListCallButton=null
...
Рейтинг: 0 / 0
10.12.2013, 00:29:38
    #38494809
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
нет, все же спасибо) решил проблему, все же Вы натолкнули меня на мысль)
может и не на это пытались Вы меня натолкнуть, но все же
решил проблему методом contains()

Код: java
1.
2.
3.
4.
5.
   JButton button = (JButton) e.getSource();
    if ( Btn.getListCallButton().contains(button)) {
     ....
    }
...



Действительно спасибо Вам за потраченное время!
...
Рейтинг: 0 / 0
10.12.2013, 00:33:37
    #38494810
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swing/прослушка событий
javapecker,
увидел Ваш последний пост, после того как отправил.
Да согласен, что архитектура оставляет желать лучшего, но..со временем)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Swing/прослушка событий / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]