powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Swing/прослушка событий
24 сообщений из 24, страница 1 из 1
Swing/прослушка событий
    #38494709
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Пост конечно огроменный, но еще больше код уменьшить не смог. Извиняюсь
В классе 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
Swing/прослушка событий
    #38494729
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021,
Код: java
1.
2.
private ArrayList<JButton> listenListFloorButton = Btn.getListFloorButton();
if (listenListFloorButton.equals(Btn.getListFloorButton())


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


с массивами , как ни странно работало
если убрать присвоение, то пять же вылетает налПоинтер
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494742
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему с массивами работало, честно говоря не понимаю
хотя логике и противоречит это)
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494751
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021, я не о том что оно не работает, я спрашиваю что с чем и для чего вы сравниваете?
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494756
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Swing/прослушка событий
    #38494760
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Swing/прослушка событий
    #38494765
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,
нигде не видел) пытался написать
а хочу я, в упрощенном варианте если говорить, создать фрэйм с двумя панелями "ЛЕВАЯ" и "ПРАВАЯ" .
Панели -это массивы кнопок, как одна так и другая.
и при нажатии на кнопку необходимо оперделить какому массивц принадлежит нажатая кнопка, ну и дальше выполнить уже какие-либо действия
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494771
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,

этот кусок кода всего лишь выводит кнопки в обратном порядке
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494773
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021,и через геттер и сеттер достаю списки из класса Btn, чтобы
сравнить co списками из класса BtnВот прочитайте внимательно то что написали еще раз, а лучше два.
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494780
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Swing/прослушка событий
    #38494783
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021, вопрос. Чем эти списки будут отличаться?
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494786
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Swing/прослушка событий
    #38494787
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,
идет просто прослушивание события и если это событие принадлежит одному массиву кнопок, то выполняем одно днйствие,
если другому массиву, то выполняем другое действие
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494788
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В код не вникал особо, почему не унаследоваться от JButton и не добавить поле Listener, сетать его в конструкторе например.
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494790
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021,эммм.... не понимаю вопроса, если честно.Блин, что ж делать. Ок, вы создаете два листа кнопок в классе Btn, один раз, и больше не меняете нигде . В какой-то момент передаете ссылки на эти листы в ваш listener. И при нажатии на кнопку геттером забираете эти же ссылки и сравниваете ссылки сами с собой. Почему они должны начать различаться? Зачем вы это делаете?
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494792
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapecker,идет просто прослушивание события и если это событие принадлежит одному массиву кнопок, то выполняем одно днйствие,
если другому массиву, то выполняем другое действиеНа минуточку, вы событие
Код: java
1.
ActionEvent e

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

к сожалению, не представляю себе как эт осделать
да и, честно гворя, просто желания уж нету переписывать все с нуля...это уже четвертый раз будет)
есть рабочий вариант с массивами, но списки как-то привлекательней выглядят вот и пытаюсь через них реализовать, поэтому и ковыряюсь)
в люом случае спасибо за совет)
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494795
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021,есть рабочий вариант с массивами
покажите
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494802
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Swing/прослушка событий
    #38494803
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя тут понятно что копилятор ругается на то что присваиваю массиву событие
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494808
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex021,понл, что вы хотели донести до меняПока непохоже. Вы вешаете слушатели на кнопки, а в качестве источника действия хотите получить лист кнопок. Объясните теперь, зачем сначала вешать на кнопки, которые должны обладать разным поведением, одинаковые слушатели, и уже в них разбираться что делать? Повесьте на левые кнопки один слушатель, который будет делать то что нужно левым, и на правые один по такому же принципу.
По поводу ошибки в вашем первом посте, она тут ни при чем, надо менять архитектуру. Но если интересно, левая панель кидала исключение потому, что слушателей для ее кнопок вы создавали до того как инициализировали правую панель, поэтому в этих слушателях listenListCallButton=null
...
Рейтинг: 0 / 0
Swing/прослушка событий
    #38494809
alex021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,
нет, все же спасибо) решил проблему, все же Вы натолкнули меня на мысль)
может и не на это пытались Вы меня натолкнуть, но все же
решил проблему методом contains()

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



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


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