powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавить строки из БД в JTable
10 сообщений из 10, страница 1 из 1
Добавить строки из БД в JTable
    #38952797
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый День! не могу никак обновить модель данных при изменении в БД. Изменяю(дополняю) БД из другого окна-все прекрасно сохраняется, все работает, а модель данных в таблице не меняется(( посмотрите, пожалуйста и помогите кодом, как правильно написать метод ReloadActionListener, который отвечает за нажатие на кнопку обновления данных в таблице

Код: 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.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
package diplomwork2;


import java.awt.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.*;

public class Test extends RealizedIMainFrame{
    
    private JPanel buttonPanel=new JPanel();
    private JButton button = new JButton("Reload");
//-----------------------------------------------------------------------------------------
    public class JCHECKBOXCellEditorRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {

        private JCheckBox CheckBox;
        
        public JCHECKBOXCellEditorRenderer() {
            this.CheckBox = new JCheckBox();
            CheckBox.addActionListener(actionListener);
            CheckBox.setOpaque(false);
            
        }
        private ActionListener actionListener = new ActionListener() {
		 @Override public void actionPerformed(ActionEvent actionEvent) {
                     if(CheckBox.isSelected()){
                table.setRowHeight(table.getSelectedRow(), 50);
                     table.setFillsViewportHeight(true);
                     table.setSelectionBackground(Color.RED);
                     }
                     else{
                         table.setRowHeight(table.getSelectedRow(), 20);
                     }
                     
                }
                 };
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            CheckBox.setSelected(Boolean.TRUE.equals(value));
            
            return CheckBox;
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            CheckBox.setSelected(Boolean.TRUE.equals(value));
            return CheckBox;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            
            stopCellEditing();
        }

        @Override
        public Object getCellEditorValue() {
            return CheckBox.isSelected();
        }

    }
//-----------------------------------------------------------------------------------------
    

    private class MyObjectManager {
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
        private List<MyObject> objects = new ArrayList<Test.MyObject>();
        private List<MyObject> objects2 = new ArrayList<Test.MyObject>();
        public void addObject(MyObject object) {
            objects.add(object);
            object.setManager(this);
            propertyChangeSupport.firePropertyChange("objects", null, object);
        }
        public void addObject2(MyObject object) {
            objects2.add(object);
            object.setManager(this);
            propertyChangeSupport.firePropertyChange("objects2", null, object);
        }
        public List<MyObject> getObjects() {
            return objects;
        }
        public List<MyObject> getObjects2() {
            return objects2;
        }
        public void setAsSelected(MyObject myObject) {
            for (MyObject o : objects) {
                o.setSelected(myObject == o);
            }
        }
        public void setAsSelected2(MyObject myObject) {
            for (MyObject o : objects2) {
                o.setSelected(myObject == o);
            }
        }
    }

    private class MyObject {
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

        private MyObjectManager manager;

        private String value;

        private boolean selected;

        public MyObject(String value) {
            this.value = value;
        }

        public PropertyChangeSupport getPropertyChangeSupport() {
            return propertyChangeSupport;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
            propertyChangeSupport.firePropertyChange("value", null, value);
        }

        public MyObjectManager getManager() {
            return manager;
        }

        public void setManager(MyObjectManager manager) {
            this.manager = manager;
            propertyChangeSupport.firePropertyChange("manager", null, manager);
        }

        public boolean isSelected() {
            return selected;
        }

        public void setSelected(boolean selected) {
            if (this.selected != selected) {
                this.selected = selected;
                if (selected) {
                    manager.setAsSelected(this);
                }
                propertyChangeSupport.firePropertyChange("selected", !selected, selected);
            }
        }

    }
//-----------------------------------------------------------------------------------------
    private class ReloadActionListener implements ActionListener {
            @Override public void actionPerformed(ActionEvent e) {
                
               
                
            }

		     }
    Test(String s) {
        super();
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                       
			try {
				con = DriverManager.getConnection(url, login, password);
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
                        
			f.setBounds(0, 10, 300, 350);
                        
			f.setVisible(true);
        MyObjectManager manager = new MyObjectManager();
        for (int i = 0; i < GetLastID(); i++) {
            MyObject object = new MyObject(GetQuestion().get(i));
            
            manager.addObject(object);
        }
        for (int i = 0; i < GetLastID(); i++) {
            MyObject object = new MyObject(GetAdvise().get(i));
            
            manager.addObject2(object);
        }
        table = new JTable(new MyTableModel(manager));
        table.setRowHeight(20);
        f.getContentPane().add(table, BorderLayout.PAGE_START);
        TableColumn column = table.getColumnModel().getColumn(1);
        column.setCellEditor(new JCHECKBOXCellEditorRenderer());//Redaktor
        column.setCellRenderer(new JCHECKBOXCellEditorRenderer());//visualizator
        
        
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JScrollPane(table), BorderLayout.CENTER);
        f.pack();
        f.setVisible(true);
        f.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
			buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
			ActionListener actionListener2 = new ReloadActionListener();
			button.addActionListener(actionListener2);
			button.setVisible(true);
			buttonPanel.add(button);
        
    }
//-----------------------------------------------------------------------------------------
    public class MyTableModel extends AbstractTableModel implements PropertyChangeListener {

        private final MyObjectManager manager;

        public MyTableModel(MyObjectManager manager) {
            super();
            this.manager = manager;
            manager.propertyChangeSupport.addPropertyChangeListener(this);
            for (MyObject object : manager.getObjects()) {
                object.getPropertyChangeSupport().addPropertyChangeListener(this);
            }
            for (MyObject object2 : manager.getObjects2()) {
                object2.getPropertyChangeSupport().addPropertyChangeListener(this);
            }
            
        }

        //private MyTableModel() {super(); }

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getSource() == manager) {
                
                if (evt.getPropertyName().equals("objects")) {
                    ((MyObject) evt.getNewValue()).getPropertyChangeSupport().addPropertyChangeListener(this);
                }
                fireTableDataChanged();
            } else if (evt.getSource() instanceof MyObject) {
                int index = manager.getObjects().indexOf(evt.getSource());
                fireTableRowsUpdated(index, index);
            }
        }

        @Override
        public int getColumnCount() {
            return 3;
        }
        
        /*public int getColumn() {
            return 3;
        }*/
        @Override
        public int getRowCount() {
            return manager.getObjects().size();
        }

        public MyObject getValueAt(int row) {
            return manager.getObjects().get(row);
        }
        public MyObject getValueAt2(int row) {
            return manager.getObjects2().get(row);
        }
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch (columnIndex) {
            case 0:
                return getValueAt(rowIndex).getValue();
            case 1:
                return getValueAt(rowIndex).isSelected();
            case 2:
                return getValueAt2(rowIndex).getValue();
            }
            return null;
        }

        @Override
        public void setValueAt(Object value, int rowIndex, int columnIndex) {
            if (columnIndex == 1) {
                getValueAt(rowIndex).setSelected(Boolean.TRUE.equals(value));
            }
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return columnIndex == 1;
        }

        @Override
        public Class<?> getColumnClass(int column) {
            switch (column) {
            case 0:
                return String.class;
            case 1:
                return Boolean.class;
            case 2: 
                return String.class;
            }
            return Object.class;
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
            case 0:
                return "Questions";
            case 1:
                return "Selected";
            case 2:
                return "Advises";
            }
            return null;
        }

    }

   /* public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().initUI();
            }
        });
    }*/

}
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952804
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вываливать всю кучу говнокода, если проблема в чем-то отдельном?
Очевидно, что если данные обновились в модели, но не в таблице, то не отработал fire*Changed метод.
Зачем вы его из propertyChange вызываете? Этот метод запускается кем?
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952841
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
вызываю, тк не знаю как по-другому изменить property модели. Модель писал не я, я ее лишь переделывал под нужды своей таблицы. Как мне вызывать его из reload метода? я в java недавно, еще не знаю различий между говнокодом и обычным тру кодом.
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952871
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Totlant,

TableModel у вас читает данные из ObjectManager. Когда данные обновились, нужно использовать один из методов fireЧегоНибудьChanged из AbstractTableModel, чтобы JTable обновила отображение.
Если вы сами не понимаете что делает ваш код, то как вам с ним помочь? Я вот на вскидку тоже не понимаю что он делает.

Totlant Модель писал не я, я ее лишь переделывал под нужды своей таблицы.
Гениальное оправдание. Ну, это ведь всё меняет. Сразу так и хочется помочь вам с кодом, в который вы даже не потрудились вникнуть.
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952892
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

если бы я знал, как это сделать, я бы сюда не обращался. У меня такой ход решения, который не дал результатов: я задал manager как глобальную переменную, в методе обновления таблицы написал
Код: java
1.
manager.propertyChangeSupport.getPropertyChangeListeners();

-не заработало
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952900
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Totlantесли бы я знал, как это сделать, я бы сюда не обращался. У меня такой ход решения, который не дал результатов: я задал manager как глобальную переменную, в методе обновления таблицы написал

Вы не писали код. Вы не разбираетесь в коде, который написан. Вам дан полный совет что и когда вызывать. Написать метод за вас? Ну, ждите добрых самаритян тогда.

Totlant
Код: java
1.
manager.propertyChangeSupport.getPropertyChangeListeners();


-не заработало
get в переводе с английского в данном контексте переводится как "получить".
Вы получили слушателей. Какого мега эффекта должно это принести?
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952940
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
вы странный такой... я писал, что сам изменял код, соответственно разбираюсь в нем. Попросил о помощи, а вместо нее услышал только тявканье на чужой код и оскобления.
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38952973
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он не странный, он просто здесь очень давно.
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38953018
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TotlantBlazkowicz,
вы странный такой... я писал, что сам изменял код, соответственно разбираюсь в нем. Попросил о помощи, а вместо нее услышал только тявканье на чужой код и оскобления.

Вы просите помощи. Но выясняется, что Вы сами ничего не сделали, чтобы помочь себе. Никаких усилий.
Но при этом уже оскорбили собеседника.
Подозреваю, что Вы не найдёте здесь помощи с таким подходом.
Прощайте.
...
Рейтинг: 0 / 0
Добавить строки из БД в JTable
    #38953048
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TotlantBlazkowicz,
вы странный такой... я писал, что сам изменял код, соответственно разбираюсь в нем. Попросил о помощи, а вместо нее услышал только тявканье на чужой код и оскобления.
Добро пожаловать в интернет.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавить строки из БД в JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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