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

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.FlowLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseListener;
  8. import javax.swing.BorderFactory;
  9. import javax.swing.JButton;
  10. import javax.swing.JDialog;
  11. import javax.swing.JFrame;
  12. import javax.swing.JLabel;
  13. import javax.swing.JOptionPane;
  14. import javax.swing.JPanel;
  15. import javax.swing.JScrollPane;
  16. import javax.swing.JTable;
  17. import javax.swing.JTextField;
  18. public class BookSearchWindow extends JFrame implements MouseListener, ActionListener{
  19. BooksData booksData = new BooksData();
  20. InformDataAll dataAll = new InformDataAll();
  21. private JPanel searchWindowPanel = new JPanel();
  22. private JPanel selectSearchPanel = new JPanel();
  23. private JPanel bookTablePanel = new JPanel();
  24. private JLabel bookSearchLabel = new JLabel("Search by book title");
  25. private JTextField bookSearchField = new JTextField();
  26. private JLabel autorSearchLabel = new JLabel("Search by autor");
  27. private JTextField autorSearchField = new JTextField();
  28. private JLabel janreSearchLabel = new JLabel("Search by autor");
  29. private JTextField janreSearchField = new JTextField();
  30. private JButton searchButton = new JButton("Search");
  31. private String bookArray[][];
  32. private String tableTittle[] = { "Book title", "Janre", "Autor", "Publisher" };
  33. private int row;
  34. private int column;
  35. private JTable bookTable;
  36. private JScrollPane scrollPane;
  37. private JOptionPane DataShowPane;
  38. public BookSearchWindow() {
  39. fillBookArray();
  40. fillBookTable();
  41. setSize(600, 800);
  42. setLayout(new FlowLayout());
  43. setLocationRelativeTo(null);
  44. searchWindowPanel.setPreferredSize(new Dimension(600, 800));
  45. searchWindowPanel.setLayout(new FlowLayout());
  46. selectSearchPanel.setPreferredSize(new Dimension(600, 300));
  47. selectSearchPanel.setLayout(null);
  48. bookSearchLabel.setBounds(225, 30, 150, 20);
  49. bookSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  50. bookSearchLabel.setForeground(Color.BLACK);
  51. bookSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
  52. bookSearchField.setBounds(200, 55, 200, 30);
  53. bookSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  54. autorSearchLabel.setBounds(250, 95, 100, 20);
  55. autorSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  56. autorSearchLabel.setForeground(Color.BLACK);
  57. autorSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
  58. autorSearchField.setBounds(200, 125, 200, 30);
  59. autorSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  60. janreSearchLabel.setBounds(250, 165, 100, 20);
  61. janreSearchLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  62. janreSearchLabel.setForeground(Color.BLACK);
  63. janreSearchLabel.setHorizontalAlignment((int) CENTER_ALIGNMENT);
  64. janreSearchField.setBounds(200, 195, 200, 30);
  65. janreSearchField.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  66. searchButton.setBounds(250, 250, 100, 30);
  67. searchButton.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  68. bookTablePanel.setPreferredSize(new Dimension(600, 500));
  69. bookTablePanel.setLayout(new FlowLayout());
  70. scrollPane = new JScrollPane(bookTable);
  71. scrollPane.setPreferredSize(new Dimension(570, 500));
  72. bookTable.addMouseListener(this);
  73. searchButton.addActionListener(this);
  74. selectSearchPanel.add(bookSearchLabel);
  75. selectSearchPanel.add(bookSearchField);
  76. selectSearchPanel.add(autorSearchLabel);
  77. selectSearchPanel.add(autorSearchField);
  78. selectSearchPanel.add(janreSearchLabel);
  79. selectSearchPanel.add(janreSearchField);
  80. selectSearchPanel.add(searchButton);
  81. bookTablePanel.add(scrollPane);
  82. searchWindowPanel.add(selectSearchPanel);
  83. searchWindowPanel.add(bookTablePanel);
  84. add(searchWindowPanel);
  85. setVisible(true);
  86. }
  87. public void fillBookArray() {
  88. booksData.fillBookList();
  89. bookArray = new String[booksData.getBookList().size()][4];
  90. for (int i = 0; i < bookArray.length; i++) {
  91. bookArray[i][0] = booksData.getBookList().get(i).getBookTitle();
  92. bookArray[i][1] = booksData.getBookList().get(i).getJanre();
  93. bookArray[i][2] = booksData.getBookList().get(i).getAutorName() + " "
  94. + booksData.getBookList().get(i).getAutorSurname();
  95. bookArray[i][3] = booksData.getBookList().get(i).getPublisherName();
  96. }
  97. }
  98. public void fillBookTable() {
  99. bookTable = new javax.swing.JTable(bookArray, tableTittle) {
  100. @Override
  101. public boolean isCellEditable(int arg0, int arg1) {
  102. return false;
  103. }
  104. @Override
  105. public boolean getCellSelectionEnabled() {
  106. return true;
  107. }
  108. };
  109. }
  110. public void fillBookArrayAndTableBySearch () {
  111. for (int i = 0; i < bookArray.length; i++) {
  112. for (int j = 0; j < bookArray[i].length; j++) {
  113. bookArray[i][j] = null;
  114. }
  115. }
  116. if ((!bookSearchField.getText().equalsIgnoreCase("") && !autorSearchField.getText().equalsIgnoreCase(""))
  117. || (!bookSearchField.getText().equalsIgnoreCase("") && !janreSearchField.getText().equalsIgnoreCase(""))
  118. || (!janreSearchField.getText().equalsIgnoreCase("") && !autorSearchField.getText().equalsIgnoreCase(""))) {
  119. for (int i = 0; i < booksData.getBookList().size(); i++) {
  120. if ((booksData.getBookList().get(i).getBookTitle().contains(bookSearchField.getText()))
  121. && booksData.getBookList().get(i).getAutorName().contains(autorSearchField.getText())) {
  122. for (int j = 0; j < bookArray.length; ) {
  123. bookArray[j][0] = booksData.getBookList().get(i).getBookTitle();
  124. bookArray[j][1] = booksData.getBookList().get(i).getJanre();
  125. bookArray[j][2] = booksData.getBookList().get(i).getAutorName() + " "
  126. + booksData.getBookList().get(i).getAutorSurname();
  127. bookArray[j][3] = booksData.getBookList().get(i).getPublisherName();
  128. j++;
  129. break;
  130. }
  131. }
  132. }
  133. }
  134. fillBookTable();
  135. }
  136. public void selectAndshowData() {
  137. row = bookTable.getSelectedRow();
  138. column = bookTable.getSelectedColumn();
  139. if (column == 0) {
  140. for (int i = 0; i < dataAll.getBooksList().size(); i++) {
  141. if (bookArray[row][0].equals(dataAll.getBooksList().get(i).getBookTitle())) {
  142. DataShowPane = new JOptionPane(dataAll.getBooksList().get(i));
  143. JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Book Data");
  144. dialogPane.setLocationRelativeTo(searchWindowPanel);
  145. dialogPane.setVisible(true);
  146. }
  147. }
  148. } else if (column == 2) {
  149. String autorDataSplit[] = new String[2];
  150. autorDataSplit = bookArray[row][column].split(" ");
  151. for (int i = 0; i < dataAll.getAutorsList().size(); i++) {
  152. if (autorDataSplit[0].equals(dataAll.getAutorsList().get(i).getAutorName())
  153. && autorDataSplit[1].equals(dataAll.getAutorsList().get(i).getAutorSurname())) {
  154. DataShowPane = new JOptionPane(dataAll.getAutorsList().get(i));
  155. JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Autor Data");
  156. dialogPane.setLocationRelativeTo(searchWindowPanel);
  157. dialogPane.setVisible(true);
  158. }
  159. }
  160. } else if (column == 3) {
  161. for (int i = 0; i < dataAll.getPublishersList().size(); i++) {
  162. if (bookArray[row][3].equals(dataAll.getPublishersList().get(i).getPublisherName())) {
  163. DataShowPane = new JOptionPane(dataAll.getPublishersList().get(i));
  164. JDialog dialogPane = DataShowPane.createDialog((JFrame) null, "Publisher Data");
  165. dialogPane.setLocationRelativeTo(searchWindowPanel);
  166. dialogPane.setVisible(true);
  167. }
  168. }
  169. }
  170. }
  171. @Override
  172. public void mouseClicked(MouseEvent e) {
  173. if (e.getSource() == bookTable) {
  174. System.out.println("l");
  175. selectAndshowData();
  176. }
  177. }
  178. @Override
  179. public void mousePressed(MouseEvent e) {
  180. }
  181. @Override
  182. public void mouseReleased(MouseEvent e) {
  183. }
  184. @Override
  185. public void mouseEntered(MouseEvent e) {
  186. }
  187. @Override
  188. public void mouseExited(MouseEvent e) {
  189. }
  190. @Override
  191. public void actionPerformed(ActionEvent e) {
  192. if (e.getSource() == searchButton) {
  193. fillBookArrayAndTableBySearch();
  194. searchWindowPanel.repaint();
  195. validate();
  196. }
  197. }
  198. }
Создал JTable в котором информация о книгах по клику на ячейку выдается детальная информация. Все работает нормально пока не произвожу поиск книги JTable обновляется и слушатель не реагирует на него

Решение задачи: «Заморочка слушателя мыши»

textual
Листинг программы
  1. import java.awt.Dimension;
  2. import java.awt.FlowLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JPanel;
  9.  
  10. public class Test extends JFrame implements ActionListener{
  11.    
  12.     JButton button = new JButton("1");
  13.     JPanel panel = new JPanel();
  14.  
  15.     public Test() {
  16.         setSize(500, 500);
  17.         setLayout(new FlowLayout());
  18.         setLocationRelativeTo(null);
  19.         panel.setPreferredSize(new Dimension(500, 500));
  20.         button.addActionListener(this);
  21.        
  22.        
  23.         panel.add(button);
  24.         add(panel);
  25.         setVisible(true);
  26.     }
  27.    
  28.     @Override
  29.     public void actionPerformed(ActionEvent e) {
  30.         if (e.getSource() == button){
  31.             panel.remove(button);
  32.             button = new JButton("2");
  33.             panel.add(button);
  34.             validate();
  35.                 System.out.println("1, 2");
  36.         }
  37.     }
  38. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут