Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374

Заморочка слушателя мыши

16.08.2016, 00:11. Показов 790. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
 
public class BookSearchWindow extends JFrame implements MouseListener, ActionListener{
 
    BooksData booksData = new BooksData();
    InformDataAll dataAll = new InformDataAll();
    private JPanel searchWindowPanel = new JPanel();
    private JPanel selectSearchPanel = new JPanel();
    private JPanel bookTablePanel = new JPanel();
    private JLabel bookSearchLabel = new JLabel("Search by book title");
    private JTextField bookSearchField = new JTextField();
    private JLabel autorSearchLabel = new JLabel("Search by autor");
    private JTextField autorSearchField = new JTextField();
    private JLabel janreSearchLabel = new JLabel("Search by autor");
    private JTextField janreSearchField = new JTextField();
    private JButton searchButton = new JButton("Search");
    private String bookArray[][];
    private String tableTittle[] = { "Book title", "Janre", "Autor", "Publisher" };
    private int row;
    private int column;
    private JTable bookTable;
    private JScrollPane scrollPane;
    private JOptionPane DataShowPane;
 
    public BookSearchWindow() {
        fillBookArray();
        fillBookTable();
        setSize(600, 800);
        setLayout(new FlowLayout());
        setLocationRelativeTo(null);
 
        searchWindowPanel.setPreferredSize(new Dimension(600, 800));
        searchWindowPanel.setLayout(new FlowLayout());
 
        selectSearchPanel.setPreferredSize(new Dimension(600, 300));
        selectSearchPanel.setLayout(null);
        
        bookSearchLabel.setBounds(225, 30, 150, 20);
        bookSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        bookSearchLabel.setForeground(Color.BLACK);
        bookSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
 
        bookSearchField.setBounds(200, 55, 200, 30);
        bookSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        
        autorSearchLabel.setBounds(250, 95, 100, 20);
        autorSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        autorSearchLabel.setForeground(Color.BLACK);
        autorSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
 
        autorSearchField.setBounds(200, 125, 200, 30);
        autorSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        
        janreSearchLabel.setBounds(250, 165, 100, 20);
        janreSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        janreSearchLabel.setForeground(Color.BLACK);
        janreSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
 
        janreSearchField.setBounds(200, 195, 200, 30);
        janreSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        
        searchButton.setBounds(250, 250, 100, 30);
        searchButton.setBorder(BorderFactory.createLineBorder(Color.BLACK));
 
        bookTablePanel.setPreferredSize(new Dimension(600, 500));
        bookTablePanel.setLayout(new FlowLayout());
 
        scrollPane = new JScrollPane(bookTable);
        scrollPane.setPreferredSize(new Dimension(570, 500));
 
        bookTable.addMouseListener(this);
        searchButton.addActionListener(this);
 
        selectSearchPanel.add(bookSearchLabel);
        selectSearchPanel.add(bookSearchField);
        selectSearchPanel.add(autorSearchLabel);
        selectSearchPanel.add(autorSearchField);
        selectSearchPanel.add(janreSearchLabel);
        selectSearchPanel.add(janreSearchField);
        selectSearchPanel.add(searchButton);
        bookTablePanel.add(scrollPane);
        searchWindowPanel.add(selectSearchPanel);
        searchWindowPanel.add(bookTablePanel);
        add(searchWindowPanel);
 
        setVisible(true);
    }
 
    public void fillBookArray() {
        booksData.fillBookList();
        bookArray = new String[booksData.getBookList().size()][4];
        for (int i = 0; i < bookArray.length; i++) {
            bookArray[i][0] = booksData.getBookList().get(i).getBookTitle();
            bookArray[i][1] = booksData.getBookList().get(i).getJanre();
            bookArray[i][2] = booksData.getBookList().get(i).getAutorName() + " "
                    + booksData.getBookList().get(i).getAutorSurname();
            bookArray[i][3] = booksData.getBookList().get(i).getPublisherName();
        }
    }
 
    public void fillBookTable() {
        bookTable = new javax.swing.JTable(bookArray, tableTittle) {
            @Override
            public boolean isCellEditable(int arg0, int arg1) {
                return false;
            }
            @Override
            public boolean getCellSelectionEnabled() {
                return true;
            }
        };
    }
    
    public void fillBookArrayAndTableBySearch () {
        for (int i = 0; i < bookArray.length; i++) {
            for (int j = 0; j < bookArray[i].length; j++) {
                bookArray[i][j] = null;
            }
        }
        if ((!bookSearchField.getText().equalsIgnoreCase("") && !autorSearchField.getText().equalsIgnoreCase(""))
                || (!bookSearchField.getText().equalsIgnoreCase("") && !janreSearchField.getText().equalsIgnoreCase(""))
                || (!janreSearchField.getText().equalsIgnoreCase("") && !autorSearchField.getText().equalsIgnoreCase(""))) {
            for (int i = 0; i < booksData.getBookList().size(); i++) {
                if ((booksData.getBookList().get(i).getBookTitle().contains(bookSearchField.getText())) 
                    &&  booksData.getBookList().get(i).getAutorName().contains(autorSearchField.getText())) {
                    for (int j = 0; j < bookArray.length; ) {
                        bookArray[j][0] = booksData.getBookList().get(i).getBookTitle();
                        bookArray[j][1] = booksData.getBookList().get(i).getJanre();
                        bookArray[j][2] = booksData.getBookList().get(i).getAutorName() + " "
                            + booksData.getBookList().get(i).getAutorSurname();
                        bookArray[j][3] = booksData.getBookList().get(i).getPublisherName();
                        j++;
                        break;
                    }   
                }
            }
        }
        fillBookTable();
    }
 
    public void selectAndshowData() {
        row = bookTable.getSelectedRow();
        column = bookTable.getSelectedColumn();
        if (column == 0) {
            for (int i = 0; i < dataAll.getBooksList().size(); i++) {
                if (bookArray[row][0].equals(dataAll.getBooksList().get(i).getBookTitle())) {
                    DataShowPane = new JOptionPane(dataAll.getBooksList().get(i));
                    JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Book Data");
                    dialogPane.setLocationRelativeTo(searchWindowPanel);
                    dialogPane.setVisible(true);
                }
            }
        } else if (column == 2) {
            String autorDataSplit[] = new String[2];
            autorDataSplit = bookArray[row][column].split(" ");
            for (int i = 0; i < dataAll.getAutorsList().size(); i++) {
                if (autorDataSplit[0].equals(dataAll.getAutorsList().get(i).getAutorName())
                        && autorDataSplit[1].equals(dataAll.getAutorsList().get(i).getAutorSurname())) {
                    DataShowPane = new JOptionPane(dataAll.getAutorsList().get(i));
                    JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Autor Data");
                    dialogPane.setLocationRelativeTo(searchWindowPanel);
                    dialogPane.setVisible(true);
                }
            }
        } else if (column == 3) {
            for (int i = 0; i < dataAll.getPublishersList().size(); i++) {
                if (bookArray[row][3].equals(dataAll.getPublishersList().get(i).getPublisherName())) {
                    DataShowPane = new JOptionPane(dataAll.getPublishersList().get(i));
                    JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Publisher Data");
                    dialogPane.setLocationRelativeTo(searchWindowPanel);
                    dialogPane.setVisible(true);
                }
            }
        }
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getSource() == bookTable) {
            System.out.println("l");
            selectAndshowData();
        }
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == searchButton) {
            fillBookArrayAndTableBySearch();
            searchWindowPanel.repaint();
            validate();
        }
    }
}


Создал JTable в котором информация о книгах по клику на ячейку выдается детальная информация. Все работает нормально пока не произвожу поиск книги JTable обновляется и слушатель не реагирует на него
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2016, 00:11
Ответы с готовыми решениями:

Ошибка слушателя
Всем привет. Недавно начал учить Java и столкнулся с одной проблемой при написании калькулятора: в классе CalculatorEngine выдает ошибку в...

Исключения в методе слушателя
Я пишу пытаюсь написать калькулятор для подсчета длины спиц на велосипедном колесе, при нажатии на баттон при условии заполненных полей...

Реализация общего слушателя
В программе есть 3 класса: интерфейс пользователя (jPanel), класс рабочего объекта и главное окно (jFrame с экземплярами интерфейса и...

13
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
18.08.2016, 18:22
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
Java
1
2
public void fillBookTable() { 
    bookTable = new javax.swing.JTable(bookArray, tableTittle)
Таблица пересоздаётся, а слушатель не добавляется.
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
19.08.2016, 20:01  [ТС]
aleksandy,
Так я слушателя не к объекту, а к его переменой добавил он же так и остается bookTable.
В принципе я так понимаю что просто создается новый объект и ложится поверх старого и слушатель просто не видит новый а видит старый
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
22.08.2016, 18:26
DavidKarchikyan,

слушатель добавляется не переменной, а экземпляру класса, ссылка на который находится в переменной в момент вызова метода addActionListener().
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
22.08.2016, 21:11  [ТС]
aleksandy,
ну понятно что не на саму переменную).
Но у переменной ссылка меняется же при создании нового экземпляра.

Заморочка больше в обновлении графики, кое что переделал получается через раз просто).
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
23.08.2016, 14:21
DavidKarchikyan, завязывай с гуём. Ты элементарнейших вещей ещё не понимаешь.

Сможешь без запуска программы сказать, что будет выведено на консоль и почему?
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A {
  int value;
 
  void setValue(int v) {
    this.value = v;
  }
 
  int getValue() {
    return this.value;
  }
 
  public static void main(String[] args) {
    A a = new A();
    a.setValue(10);
 
    a = new A();
    System.out.println(a.getValue());
  }
}
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
24.08.2016, 08:47  [ТС]
aleksandy, ошибка не издевайся

Добавлено через 45 секунд
aleksandy, null pointer exeption если так интересно
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
24.08.2016, 09:29
почему ошибка? думаю, совет вам верный дали постом выше
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
24.08.2016, 09:33
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
null pointer exeption если так интересно
Не думал, что всё так запущено. Будет "0", выясни почему так. И, возможно, ты поймёшь в чём проблема со слушателем.
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
24.08.2016, 09:46  [ТС]
aleksandy,
Ну ладно 0 согласен, что по умолчанию 0 присваивается забыл.
А насчет слушателя
JButton button = new JButton("1");
button.addListener
button = new JButton("2");
по твоему на кнопку 2 слушатель не будет работать но у меня вот так на обе кнопки все прекрасно работает.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
24.08.2016, 11:00
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
у меня вот так на обе кнопки все прекрасно работает.
ЛПП.

Покажешь запускабельный код, демонстрирующий сие чудо?
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
24.08.2016, 11:23  [ТС]
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
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Test extends JFrame implements ActionListener{
    
    JButton button = new JButton("1");
    JPanel panel = new JPanel();
 
    public Test() {
        setSize(500, 500);
        setLayout(new FlowLayout());
        setLocationRelativeTo(null);
        panel.setPreferredSize(new Dimension(500, 500));
        button.addActionListener(this);
        
        
        panel.add(button);
        add(panel);
        setVisible(true);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button){
            panel.remove(button);
            button = new JButton("2");
            panel.add(button);
            validate();
                System.out.println("1, 2");
        }
    }
}
вот так что на кнопку 1 что на кнопку 2 нажимая меня в консоли все норм печатает
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
25.08.2016, 10:19
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
меня в консоли все норм печатает
У тебя какая-то особенная консоль, либо код ты привёл неполный. Т.к. в моей слушатель работает лишь однажды. После того как вторая кнопка замещает на панели первую, сколько в неё ни тыкай, в консоли ожидаемо ничего не появляется.
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
25.08.2016, 15:35  [ТС]
aleksandy,
код полный и все таки вы правы, просто у меня то ли глюк то ли что потому что код в IntelliJ не работает но в Eclipse работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2016, 15:35
Помогаю со студенческими работами здесь

Автоматическое добавление слушателя
Всем привет... Недавно возникла проблема.... Когда программа запускается то автоматически размещает на форме jCheckBox. Мне надо...

SWT: Удалить слушателя
Предположим, у меня есть класс, объекты которого умеют генерить и добавлять специфического слушателя (отдельный класс, имплементящий...

Не получается реализовать слушателя ActionListener
Решил попробовать реализовать слушателя, делаю первый раз. По итогу должна была получиться простая программа, которая содержит 2...

Как правильно выглядит шаблон слушателя?
Всем привет! Учу вот Джаву, изучаю работу листенеров. По шаблонам в инете готовым-то получается, да мне нужно самому разобрать и...

Создание слушателя для работы с не-моими приложениями
Возможно ли java вообще создать приложение со слушателем, работающее в &quot;фоновом режиме&quot;? Например, я совершаю какие-то действия в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru