powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как обновить модель данных JInternalFrame
5 сообщений из 5, страница 1 из 1
как обновить модель данных JInternalFrame
    #38952666
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.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
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) {
                MyObjectManager manager2 = new MyObjectManager();
        for (int i = 0; i < GetLastID(); i++) {
            MyObject object = new MyObject(GetQuestion().get(i));
            
            manager2.addObject(object);
        }
        for (int i = 0; i < GetLastID(); i++) {
            MyObject object = new MyObject(GetAdvise().get(i));
            
            manager2.addObject2(object);
        }
        table = new JTable(new MyTableModel(manager2));
        table.setRowHeight(20);
                
            }
	 
		     }
    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
как обновить модель данных JInternalFrame
    #38952726
Victor Nevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Totlant, вы форумом промахнулись.

зачем создавать new JTable в ReloadActionListener, если она никуда не кладётся ... данные обновляются (возможно), но не в той таблице.

курить
fireTableRowsInserted
fireTableRowsUpdated
fireTableCellUpdated
fireTableRowsDeleted
....
...
Рейтинг: 0 / 0
как обновить модель данных JInternalFrame
    #38952742
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor Nevsky,
спасибо! подскажите мб куда еще можно обращаться? кроме стэка и кибера
...
Рейтинг: 0 / 0
как обновить модель данных JInternalFrame
    #38952766
Victor Nevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Totlant,
сначала сюда , с конкретным вопросом туда , если не помогло, наверное сюда
...
Рейтинг: 0 / 0
как обновить модель данных JInternalFrame
    #38952768
Totlant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor Nevsky,

спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как обновить модель данных JInternalFrame
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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