powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
27 сообщений из 27, показаны все 2 страниц
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596518
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Пишу программу, типа справочник.
В программе присутствуют 2 формы (главная и поиска), tablemodel и connection.
Так вот: нужна помощь в том, как правильно передать результаты поиска в главную форму. Как говорится - чувствую, что ответ где-то рядом, а понять, где ошибка - не могу.

ЗЫ. Яву только начал изучать, так что просьба сильно не пинать. До этого писал проги на Дельфях. Понадобилась кроссплатформенность, выбор пал на Яву.
ЗЗЫ. Исходники во вложении.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596533
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkкак правильно передать результаты поиска в главную форму
В дельфях как делал?
Например, главнаяФорма.Держи(id).
И тут можно так же.
...
Не все будут скачивать твой zip. Старайся короткий код прямо сюда.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596795
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
в Дэльфях делал так: в форме поиска sql-запрос через tquery (например), в модуле datamodule лежат компоненты source1-2, 1-й завязан на таблицу, 2-й на запрос. После отработки запроса гриду прописывал свойство datasource на source2, потом назад. В JTable такого нет. Надо как-то крутить через tablemodel. А вот как - я догнать не могу.

Вот код класса frmFind:

Код: 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.
package postidx;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
//import javax.swing.text.AbstractDocument;
//import javax.swing.text.DocumentFilter;

import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.ComponentOrientation;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class frmFind extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private static JTextField edtFind;
	
	private static JPanel buttonPanelFind = null;
	private static ButtonGroup groupFind = null;
	private static JRadioButton rgbtnIndex = null;
	private static JRadioButton rgbtnNaimOPS = null;
	private static JRadioButton rgbtnRegion = null;
	private static JRadioButton rgbtnAutonom = null;
	private static JRadioButton rgbtnArea = null;
	private static JRadioButton rgbtnCity = null;
		
	private static String sqlStrFind;
    private static String findSqlStr = "select idx, opsname, region, autonom, area, city from postidx where ";
    private static String indexSqlStr = "[idx] like ";
    private static String opsnameSqlStr = "[opsname] like ";
    private static String regionSqlStr = "[region] like ";
    private static String autonomSqlStr = "'[autonom] like ";
    private static String areaSqlStr =  "[area] like ";
    private static String citySqlStr = "[city] like ";
    private static int resId;
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frmFind frame = new frmFind();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public frmFind() {
		setFont(new Font("Liberation Serif", Font.PLAIN, 9));
		setPreferredSize(new Dimension(540, 230));
		setMinimumSize(new Dimension(540, 230));
		setName("FindForm");
		setTitle("Поиск записей");
		setResizable(false);
		setIconImage(Toolkit.getDefaultToolkit().getImage(frmFind.class.getResource("/postidx/res/find.png")));
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 140, 272);
		contentPane = new JPanel();
		contentPane.setPreferredSize(new Dimension(540, 230));
		contentPane.setFont(new Font("Liberation Serif", Font.PLAIN, 9));
		contentPane.setBorder(new EmptyBorder(1, 1, 1, 1));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		ConnectionDb connect = new ConnectionDb();

		ActionListener findListener = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ev) {
				
				switch ( ((JRadioButton)ev.getSource()).getText() ) {
	                case "Индексу":
	                	resId = 0;
	                    break;
	                case "Наименованию ОПС":
	                	resId = 1;;
	                    break;
	                case "Региону (область, край и т.п.)":
	                	resId = 2;;
	                    break;
	                case "Автономной области":
	                	resId = 3;
	                    break;
	                case "Району, в котором находится ОПС":
	                	resId = 4;
	                    break;
	                case "Населенному пункту":
	                	resId = 5;
	                    break;
	                default:
	                    break;
	            }
			}
		};

		buttonPanelFind = new JPanel();
		buttonPanelFind.setFont(new Font("Liberation Serif", Font.PLAIN, 9));
		buttonPanelFind.setPreferredSize(new Dimension(535, 225));
		buttonPanelFind.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

		groupFind = new ButtonGroup();
		rgbtnIndex = new JRadioButton("Индексу", false);
		rgbtnIndex.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnIndex.addActionListener(findListener);
		groupFind.add(rgbtnIndex);
		
		rgbtnNaimOPS = new JRadioButton("Наименованию ОПС", false);
		rgbtnNaimOPS.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnNaimOPS.addActionListener(findListener);
		groupFind.add(rgbtnNaimOPS);
		
		rgbtnRegion = new JRadioButton("Региону (область, край и т.п.)", false);
		rgbtnRegion.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnRegion.addActionListener(findListener);
		groupFind.add(rgbtnRegion);
		
		rgbtnAutonom = new JRadioButton("Автономной области", false);
		rgbtnAutonom.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnAutonom.addActionListener(findListener);
		groupFind.add(rgbtnAutonom);
		
		rgbtnArea = new JRadioButton("Району, в котором находится ОПС", false);
		rgbtnArea.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnArea.addActionListener(findListener);
		groupFind.add(rgbtnArea);
		
		rgbtnCity = new JRadioButton("Населенному пункту", false);
		rgbtnCity.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		rgbtnCity.addActionListener(findListener);
		groupFind.add(rgbtnCity);

		getContentPane().add(buttonPanelFind, BorderLayout.WEST);
		
		JLabel label = new JLabel("Искать по...");
		label.setFont(new Font("Liberation Serif", Font.PLAIN, 12));
		
		edtFind = new JTextField();
		edtFind.setPreferredSize(new Dimension(300, 24));
		
		JButton btnFind = new JButton("Поиск");
		btnFind.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				if (!rgbtnIndex.isSelected() & !rgbtnNaimOPS.isSelected() & !rgbtnRegion.isSelected() & !rgbtnAutonom.isSelected()
						& !rgbtnArea.isSelected() & !rgbtnCity.isSelected()) {
					JOptionPane.showMessageDialog(null, "Не задана область поиска!");
					}
				if (edtFind.getText().trim().length() == 0) {
					JOptionPane.showMessageDialog(null, "Не задана строка поиска!");
					}
				else {
					switch ( resId ) {
	                case 0:
	                	sqlStrFind = findSqlStr + indexSqlStr + edtFind.getText();
	                    break;
	                case 1:
	                	sqlStrFind = findSqlStr + opsnameSqlStr + "%" + edtFind.getText().toUpperCase() + "%";
	                    break;
	                case 2:
	                	sqlStrFind = findSqlStr + regionSqlStr + "%" + edtFind.getText().toUpperCase() + "%";
	                    break;
	                case 3:
	                	sqlStrFind = findSqlStr + autonomSqlStr + "%" + edtFind.getText().toUpperCase() + "%";
	                    break;
	                case 4:
	                	sqlStrFind = findSqlStr + areaSqlStr + "%" + edtFind.getText().toUpperCase() + "%";
	                    break;
	                case 5:
	                	sqlStrFind = findSqlStr + citySqlStr + "%" + edtFind.getText().toUpperCase() + "%";
	                    break;
	                default:
	                    break;
	            }
				//JOptionPane.showMessageDialog(null, sqlStrFind);
				
				//connect.closeConnection();
				postidxTableModel ptm = new postidxTableModel();
				JTable postidxTable = new JTable(ptm);
				postidxTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
				postidxTable.setSize(new Dimension(895, 650));

				JScrollPane postidxTableScrollPane = new JScrollPane(postidxTable);
				postidxTableScrollPane.setFont(new Font("Dialog", Font.BOLD, 12));
				postidxTableScrollPane.setSize(new Dimension(895, 650));
				//connect.openConnection();

				try {
					ptm.addData(connect, sqlStrFind);
				} catch (SQLException ev) {
					ev.printStackTrace();
				} finally {
					setVisible(false);
				}
			}
		}});
		btnFind.setFont(new Font("Liberation Serif", Font.BOLD, 11));
		btnFind.setPreferredSize(new Dimension(100, 24));
		btnFind.setIcon(new ImageIcon(frmFind.class.getResource("/postidx/res/ok_find.png")));
		
		JButton btnCancel = new JButton("Отмена");
		btnCancel.setFont(new Font("Liberation Serif", Font.BOLD, 11));
		btnCancel.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				edtFind.setText("");
				setVisible(false);
		}});
		
		btnCancel.setPreferredSize(new Dimension(100, 24));
		btnCancel.setIcon(new ImageIcon(frmFind.class.getResource("/postidx/res/undo2.png")));
		GroupLayout gl_buttonPanelFind = new GroupLayout(buttonPanelFind);
		gl_buttonPanelFind.setHorizontalGroup(
			gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_buttonPanelFind.createSequentialGroup()
					.addGap(16)
					.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
						.addComponent(rgbtnCity)
						.addComponent(rgbtnRegion)
						.addComponent(rgbtnIndex)
						.addComponent(label)
						.addGroup(gl_buttonPanelFind.createSequentialGroup()
							.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
								.addComponent(rgbtnArea)
								.addComponent(rgbtnAutonom)
								.addComponent(rgbtnNaimOPS))
							.addGap(33)
							.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.LEADING, false)
								.addGroup(gl_buttonPanelFind.createSequentialGroup()
									.addComponent(btnFind, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
									.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(btnCancel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
								.addComponent(edtFind, GroupLayout.PREFERRED_SIZE, 269, GroupLayout.PREFERRED_SIZE))))
					.addContainerGap(336, Short.MAX_VALUE))
		);
		gl_buttonPanelFind.setVerticalGroup(
			gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_buttonPanelFind.createSequentialGroup()
					.addGap(20)
					.addComponent(label)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(rgbtnIndex)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
						.addComponent(rgbtnNaimOPS)
						.addComponent(edtFind, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_buttonPanelFind.createSequentialGroup()
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(rgbtnRegion)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(rgbtnAutonom)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(rgbtnArea)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(rgbtnCity))
						.addGroup(gl_buttonPanelFind.createSequentialGroup()
							.addGap(31)
							.addGroup(gl_buttonPanelFind.createParallelGroup(Alignment.BASELINE)
								.addComponent(btnFind, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
								.addComponent(btnCancel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))
					.addContainerGap(20, Short.MAX_VALUE))
		);
		buttonPanelFind.setLayout(gl_buttonPanelFind);

		pack();
		setLocationRelativeTo(null);
	}

}
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596798
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это код класса TableModel:


Код: 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.
package postidx;

import java.sql.ResultSet;
import java.sql.SQLException;
//import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class postidxTableModel extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	
	//public static Statement statmt;
    //public static ResultSet resSet;
	
	private int columnCount = 6;
	private ArrayList<String []> DataArrayList;
	
	public postidxTableModel() {
		DataArrayList = new ArrayList<String []>();
		for (int i = 0; i < DataArrayList.size(); i++) {
			DataArrayList.add(new String[getColumnCount()]);
		}
	}

	@Override
	public int getColumnCount() {
		return columnCount;
	}

	@Override
	public String getColumnName(int columnIndex) {
		switch(columnIndex) {
			case 0: return "Индекс";
			case 1: return "Наименование ОПС";
			case 2: return "Регион";
			case 3: return "Автономная область";
			case 4: return "Район";
			case 5: return "Населенный пункт";
		}
		return "";
	}

	@Override
	public int getRowCount() {
		return DataArrayList.size();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		String []rows = DataArrayList.get(rowIndex);
		return rows[columnIndex];
	}

	public void addData(String []row) {
		String []rowTable = new String[getColumnCount()];
		rowTable = row;
		DataArrayList.add(rowTable);
	}
	
	public void addData(ConnectionDb connect, String querystr) throws SQLException {
		ResultSet result = connect.resultSetQuery(querystr);
	    try {
			while(result.next())
			{
				String []row = {
						result.getString("idx"),
						result.getString("opsname"),
						result.getString("region"),
						result.getString("autonom"),
						result.getString("area"),
						result.getString("city")
				};
				addData(row);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}


...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596802
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А это код класса frmMain:


Код: 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.
package postidx;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.util.Locale;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.border.EmptyBorder;

import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.awt.event.InputEvent;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class frmMain extends JFrame {

	private static final long serialVersionUID = 1L;

    public static String mainQueryStr = "SELECT idx, opsname, region, autonom, area, city FROM postidx";
	public static JTable postidxTable = null;
    
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frmMain frame = new frmMain();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public frmMain() {
		setLocale(new Locale("ru"));
		setSize(new Dimension(900, 700));
		setResizable(false);
		setName("MainForm");
		setMinimumSize(new Dimension(900, 700));
		setTitle("\u041F\u043Eчт\u043Eв\u044Bе и\u043Dде\u043Aс\u044B суб\u044Aе\u043Aт\u043Eв РФ");
		setIconImage(Toolkit.getDefaultToolkit().getImage(frmMain.class.getResource("/postidx/res/postidx.png")));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 700, 379);
		setVisible(true);

		pack();
		setLocationRelativeTo(null);


		ConnectionDb connect = new ConnectionDb();
		connect.initProperties();
		connect.init();
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.setName("menubar1");
		setJMenuBar(menuBar);
		
		JMenu mmWorkWithDB = new JMenu("Раб\u043Eта с баз\u043Eй");
		mmWorkWithDB.setName("mmWorkWithDB");
		menuBar.add(mmWorkWithDB);
		
		JMenuItem mniFind = new JMenuItem("\u041F\u043Eис\u043A за\u043Fисей");
		mniFind.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				frmFind frmFind = new frmFind();
				frmFind.setVisible(true);
			}
		});
		mniFind.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/find.png")));
		mniFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
		mmWorkWithDB.add(mniFind);
		
		JMenuItem mniSort = new JMenuItem("С\u043Eртир\u043Eв\u043Aа за\u043Fисей");
		mniSort.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/sort.png")));
		mniSort.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F8, InputEvent.CTRL_MASK));
		mmWorkWithDB.add(mniSort);
		
		JMenu mmNavigation = new JMenu("\u041Dавигаци\u044F");
		mmNavigation.setName("mmNavigation");
		menuBar.add(mmNavigation);
		
		JMenuItem mniNavigation = new JMenuItem("\u041Eбрат\u043D\u043E в режи\u043C \u043Fр\u043Eс\u043C\u043Eтра");
		mniNavigation.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/undo.png")));
		mmNavigation.add(mniNavigation);
		
		JMenu mmHelp = new JMenu("\u041F\u043E\u043C\u043Eщ\u044C");
		mmHelp.setName("mmHelp");
		menuBar.add(mmHelp);
		
		JMenuItem mniAbout = new JMenuItem("\u041E \u043Fр\u043Eгра\u043C\u043Cе");
		mniAbout.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/about.png")));
		mniAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0));
		mmHelp.add(mniAbout);
		
		JMenuItem mniReadme = new JMenuItem("\u041Aрат\u043Aа\u044F и\u043Dф\u043Eр\u043Cаци\u044F");
		mniReadme.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/readme.png")));
		mmHelp.add(mniReadme);
		
		JMenuItem mniHistory = new JMenuItem("Ист\u043Eри\u044F из\u043Cе\u043Dе\u043Dий");
		mniHistory.setIcon(new ImageIcon(frmMain.class.getResource("/postidx/res/history.png")));
		mmHelp.add(mniHistory);
		
		JMenu mmExit = new JMenu("В\u044Bх\u043Eд");
		mmExit.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				connect.closeConnection();
		        System.exit(0);
			}
		});
		mmExit.setName("mmExit");
		menuBar.add(mmExit);

		JPanel contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(1, 1, 1, 1));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		postidxTableModel ptm = new postidxTableModel();
		JTable postidxTable = new JTable(ptm);
		postidxTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		postidxTable.setSize(new Dimension(895, 650));

//		setColumnsWidth();
		JScrollPane postidxTableScrollPane = new JScrollPane(postidxTable);
		postidxTableScrollPane.setFont(new Font("Dialog", Font.BOLD, 12));
		postidxTableScrollPane.setSize(new Dimension(895, 650));

		try {
			ptm.addData(connect, mainQueryStr);
		} catch (SQLException e) {
			e.printStackTrace();
		} 

		contentPane.add(postidxTableScrollPane, new GridBagConstraints(0,0,1,1,1,1,
				GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(1,1,1,1), 0,0));
	}

/*	public void setColumnsWidth() {
		postidxTable.getColumnModel().getColumn(0).setMinWidth(70);
		postidxTable.getColumnModel().getColumn(0).setMaxWidth(70);
		postidxTable.getColumnModel().getColumn(1).setMinWidth(350);
		postidxTable.getColumnModel().getColumn(1).setMaxWidth(350);
		postidxTable.getColumnModel().getColumn(2).setMinWidth(200);
		postidxTable.getColumnModel().getColumn(2).setMaxWidth(200);
		postidxTable.getColumnModel().getColumn(3).setMinWidth(190);
		postidxTable.getColumnModel().getColumn(3).setMaxWidth(190);
		postidxTable.getColumnModel().getColumn(4).setMinWidth(180);
		postidxTable.getColumnModel().getColumn(4).setMaxWidth(180);
		postidxTable.getColumnModel().getColumn(5).setMinWidth(170);
		postidxTable.getColumnModel().getColumn(5).setMaxWidth(170);
	} */

}


...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596809
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код класса Connection:


Код: 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.
package postidx;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;


public class ConnectionDb {

	private String curdir = System.getProperty("user.dir");
	private String dataDb = "db/postidx.sqlite";
	private String url;
	
	private Properties properties = new Properties();
	private Connection sqliteConnection;

	// Конструктор для класса
	public ConnectionDb() {
		
	}

	public ConnectionDb(String url, Properties properties) {
		this.url = url;
		this.properties = properties;
	}
	
	public void setNameDataBases(String DataDb) {
		this.dataDb = DataDb;
	}

	public void initProperties() {
		this.url = "jdbc:sqlite:" + curdir + "/" + this.dataDb;
		
		properties.setProperty("useUnicode", "true");
		properties.setProperty("characterEncoding", "UTF-8");
		
		System.out.println(url);
	}
	
	public int init() {
		if (sqliteConnection != null) {
			try {
				sqliteConnection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		try {
			Class.forName("org.sqlite.JDBC");
			sqliteConnection = DriverManager.getConnection(url, properties);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return -1;
		} catch (SQLException e) {
			e.printStackTrace();
			return -1;
		}
		return 0;
	}

	public void finalize() {
		try {
			sqliteConnection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void openConnection() {
		init();
	}
	
	public void closeConnection() {
		try {
			sqliteConnection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public ResultSet resultSetQuery(String query) {
		try {
			java.sql.Statement stmt = sqliteConnection.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
}




IDE - Eclipse Oxygen.2 Release 4.7.2 December 2017.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596820
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkДэльфях делал так:я с дельфей сразу на javaFX.
Жди тех кто свинг знает.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39596851
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123duponamkДэльфях делал так:я с дельфей сразу на javaFX.
Жди тех кто свинг знает.

Подождем, куда деваться-то.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39597052
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamk,

Swing тут не при чем. У вас в коде модель предметной области, пользовательский интерфейс и работа с базой данных намешаны в одну кучу. Разбираться в этой лапше не очень-то хочется.

Я бы так же порекомендовал перестать называть формами что попало. Набор полей для ввода это - форма. А таблица это не форма. И панелька с таблицей это тоже не форма.

Итак. Имеем форму ввода.
1. Пользователь заполняет поля. Нажимает кнопку. - лучше использовать Action вместо ActionListener. Экшны можно привязывать к разнам контролам.
2. Содержимое полей копируется в объект модели предметной области. - в идеале это делается через биндинг, как в JavaFX. Но свинг так не умеет. Только с дополнительными библиотеками, которые давно заброшены и работают только в простых случаях.
3. По объекту строится запрос к БД. - лучше использовать ORM, или хоть какую-то библиотеку, а не голый JDBC API
4. Исполняется запрос, вычитывается результат. - результат есть смысл лимитировать. Я как-то написал динамический TableModel для ResultSet любой длины. Но по факту клиент сказал - нафиг не надо. Пользователю 20-30 записией достаточно.
5. Результат копируется в объект модели предметной области. - тут надо на архитектуру смотреть. Можно копировать, можно оборачивать ResultSet.
6. Таблица, которая умеет отображать результат - обновляется. - AbstractTableModel.fileУМеняПоменялисьСтроки() - будет намного эффективнее чем addData, если нужно обновить всю таблицу.

Где именно в этом всем у вас затык вы уточнить не хотите.

Стандартная сложность тут с обновлением TableModel. Но у вас, похоже дело не в ней.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39597858
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczduponamk,

Swing тут не при чем.

Я и не говорил, что виноват swing. Дело, судя по всему в tablemodel, в который необходимо передать строку запроса из поиска, чтобы тот (или та), в свою очередь, обработал запрос и подсунул результат таблице в главном окне.
А вот как, собсно, это реализовать, я и встал.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39597859
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczduponamk,

6. Таблица, которая умеет отображать результат - обновляется. - AbstractTableModel.fileУМеняПоменялисьСтроки() - будет намного эффективнее чем addData, если нужно обновить всю таблицу.


Как я уже писал в первом посте - яву я только начал изучать, и чем заменить метод addData, не знаю.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39597869
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkКак я уже писал в первом посте - яву я только начал изучать, и чем заменить метод addData, не знаю.ну не по памяти же вы писали 500 строк..
Дайте ссыль на пример демку по Модели которая у вас почему то не выходит.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39597995
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkКак я уже писал в первом посте - яву я только начал изучать, и чем заменить метод addData, не знаю.
То есть вы вывалили сюда кучу чужого кода и даже не воспользовались отладчиком чтобы найти конкретное место проблемы?
Или вы хотите сказать, что addData вызывается с ожидаемыми данными, но данные не появляются в таблице?
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598384
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123duponamkКак я уже писал в первом посте - яву я только начал изучать, и чем заменить метод addData, не знаю.ну не по памяти же вы писали 500 строк..
Дайте ссыль на пример демку по Модели которая у вас почему то не выходит.

Нет, конечно, не по памяти.
За основу брал видео-уроки 13-14 канала "Образование онлайн":
[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598386
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Код я брал из поста выше и старался не тупо его набрать, а заодно и понять, что к чему и откуда.
Не хотите помочь - зачем писать что-либо.

ЗЫ. Не хамите.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598403
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkКод я брал из поста выше и старался не тупо его набрать, а заодно и понять, что к чему и откуда.
Не хотите помочь - зачем писать что-либо.
Ну, тут не так много отвечающих, так что предлагаю потерпеть.

duponamkЗЫ. Не хамите.
Ну, это не я тут посреди форума навалил кучу. Кода. Если вы хотите помощи, то тоже со своей стороны приложите усилия, уточните проблему и сформулируйте вопрос. Вы даже на наводящие вопросы не пытаетесь ответить. А лично мне тяжело понять.
- То ли вы не знаете как передать запрос из формы ввода в таблицу
- То ли вы не знаете как сказать таблице выполнить запрос
- То ли вы выполняете запрос, получаете данные, но они не отображаются в таблице

Уточнить конкретную проблему очень просто если использовать отладчик.
Я могу разобраться в этом говнокоде и найти проблему, но для чего мне тратить на это время, если вы сами не пытаетсь хоть что либо конкретизировать, а сразу включаете обидку?
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598510
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkДело, судя по всему в tablemodel, в который необходимо передать строку запроса из поиска, чтобы тот (или та), в свою очередь, обработал запрос и подсунул результат таблице в главном окне. придется тебе разбить вопрос на 3 штуки.
И зубы не показывай. Я злых профи в java не видел. Не задерживаются).
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598660
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю сразу обоим:
есть главное окно с таблицей, в которой при запуске отображаются данные из базы. Есть форма поиска (все-таки форма), в которой составляется запрос в зависимости от того или иного выбора пользователя. Составляется правильно, я проверял. Так вот, необходимо, чтобы данный запрос "ушел" в tablemodel, был там обработан, и, как следствие, отобразил в таблице результат поиска. Этого не происходит.


java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)
at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:426)
at java.awt.Container.addImpl(Container.java:1127)
at java.awt.Container.add(Container.java:973)
at postidx.frmMain.<init>(frmMain.java:162)
at postidx.frmMain$1.run(frmMain.java:48)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at postidx.ConnectionDb.resultSetQuery(ConnectionDb.java:85)
at postidx.postidxTableModel.addData(postidxTableModel.java:76)
at postidx.frmFind$3.actionPerformed(frmFind.java:218)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


Если я правильно понимаю текст под спойлером, то в аргументах пустая строка, поэтому и не выходит то, что надо. Хотя на стадии составления запроса строка была далеко не пустой.
В связи с этим и прошу помощи: в модуле frmFind.java идет составление запроса и дальнейшее подсовывание его tablemodule. На выходе получаем нуль. А почему так и что неправильно сделано - не понимаю.

Насчет "говнокода" - уж извините, какой есть. Изначально да, был не мой, был взят как основа для написания и доработан в дальнейшем так, как было нужно мне.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598675
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamk,
Как раз по теме, как это решено на острие прогресса.
В javaFX это решено так:
Коллекция данных биндится к таблице.
При изменении данных в коллекции Автоматически табличка показывает изменения.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598743
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamk Так вот, необходимо, чтобы данный запрос "ушел" в tablemodel, был там обработан, и, как следствие, отобразил в таблице результат поиска. Этого не происходит.
Еще раз. Это 3 разных шага в алгоритме. Вы должны использовать отладчик, чтобы точно знать какой именно из трех не работает. Вы же просите перепроверить все три, не заботясь о времени тех кто будет читать ваш код. Это немного не вежливо.


duponamkЕсли я правильно понимаю текст под спойлером, то в аргументах пустая строка, поэтому и не выходит то, что надо. Хотя на стадии составления запроса строка была далеко не пустой.
То есть вы вообще не те вопросы задаете. Ваши вопросы должны были быть такими
- что такое Exception?
- вот у меня два исключения, что они обозначают
- научите анализировать исключения

Итак, первый шаг. Выделяем основное: тип исключения, текст ошибки и номер строки вашего кода:
Код: java
1.
2.
3.
4.
5.
java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)
        ...
	at postidx.frmMain.<init>(frmMain.java:162)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at postidx.ConnectionDb.resultSetQuery(ConnectionDb.java:85)


Второй шаг. Смотрим в IDE
frmMain.java:162 - не правильно добавляется контрол
ConnectionDb.java:85 - вызывается метод по ссылке значение которой null, а должен быть объект

duponamkВ связи с этим и прошу помощи: в модуле frmFind.java идет составление запроса и дальнейшее подсовывание его tablemodule. На выходе получаем нуль. А почему так и что неправильно сделано - не понимаю.
Вы же инженер, а не гуманитарий. Почему вы пытаетесь общими терминами описать конктретную проблему?

Начните с изучения NPE и исключений в общем
https://www.google.com/search?q=Java null pointer exception explained
https://docs.oracle.com/javase/tutorial/essential/exceptions/
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39598778
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда. Если Blazkowicz прав, то вам должно быть стыдно, т.к. в дельфях исключения это самая простая часть работы.
Все дельфисты в них как рыба в воде.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39599022
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй шаг. Смотрим в IDE
frmMain.java:162 - не правильно добавляется контрол
ConnectionDb.java:85 - вызывается метод по ссылке значение которой null, а должен быть объект


Интересно получается: в модуле frmMain строке 162 соответствует одна из строк функции, код которой полностью закомментирован и в исполнении программы не участвует.
В модуле ConnectionDb.java в строке 85 находится следующее:
Код: java
1.
java.sql.Statement stmt = sqliteConnection.createStatement();


Идущий следом ResultSet
Код: java
1.
ResultSet rs = stmt.executeQuery(query);


вполне себе корректно обрабатывал все это хозяйство, при запуске проги ошибок не выдавалось. Никаких.

BlazkowiczВы же инженер, а не гуманитарий. Почему вы пытаетесь общими терминами описать конктретную проблему?
Как раз-таки гуманитарий :). Как умею, так и описываю. Уж не серчайте.

Это 3 разных шага в алгоритме.
Разбивая на 3 шага: формирование запроса происходит правильно, проверял; непонятки начинаются на стадии создания копии (или ссылки, не пойму пока) модели таблицы и копии(ссылки?) таблицы с привязкой к модели; и третий момент - если я правильно понимаю результат написанного мною кода, в модель не попадает строка с запросом, в рез-те чего я не вижу данных в таблице.
Может, по вашему, это и общие фразы, точнее не получается.

За ссылки спасибо, внимательно ознакомился с материалом.


Petro123Нда. Если Blazkowicz прав, то вам должно быть стыдно, т.к. в дельфях исключения это самая простая часть работы.
Все дельфисты в них как рыба в воде.
Как раз-таки в Дельфях у меня таких ситуаций было очень мало. С ними было проще разобраться, чем с этими исключениями.
Предлагаете переписать код под JavaFX? Уже начал потихоньку. Заморочек тоже хватает.
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39608255
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Итак, переписал прогу на JavaFX. Как ни странно, вопросы остались :(.
Размещу только проблемные и связанные с ними модули. Полные исходники в архиве.

Модуль модели:

Код: 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.
package postidx.model;

import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;


public class postidx extends RecursiveTreeObject<postidx> {

	// Опишем свойства столбцов
    public StringProperty idx;
    public StringProperty opsname;
    public StringProperty region;
    public StringProperty autonom;
    public StringProperty area;
    public StringProperty city;

    // Конструктор по умолчанию
    public postidx() {
    	this(null, null, null, null, null, null);
    }
    
    // Конструктор с некоторыми начальными данными
    public postidx(String idx, String opsname, String region, String autonom, String area, String city) {

    	// начальные данные
        this.idx =  new SimpleStringProperty(idx);
        this.opsname = new SimpleStringProperty(opsname);
        this.region = new SimpleStringProperty(region);
        this.autonom = new SimpleStringProperty(autonom);
        this.area = new SimpleStringProperty (area);
        this.city = new SimpleStringProperty (city);
    }

    // Геттеры и сеттеры
    
    public String getIdx() {
        return idx.get();
    }

    public void setIdx(String idx) {
        this.idx.set(idx);
    }

    public StringProperty idxProperty() {
        return idx;
    }

    public String getOPSName() {
        return opsname.get();
    }

    public void setOPSName(String opsname) {
        this.opsname.set(opsname);
    }

    public StringProperty OPSNameProperty() {
        return opsname;
    }

    public String getRegion() {
        return region.get();
    }

    public void setRegion(String region) {
        this.region.set(region);
    }

    public StringProperty regionProperty() {
        return region;
    }

    public String getAutonom() {
        return autonom.get();
    }

    public void setAutonom(String autonom) {
        this.autonom.set(autonom);
    }

    public StringProperty autonomProperty() {
        return autonom;
    }

    public String getArea() {
        return area.get();
    }

    public void setArea(String area) {
        this.area.set(area);
    }

    public StringProperty areaProperty() {
        return area;
    }
    
    public String getCity() {
        return city.get();
    }

    public void setCity(String city) {
        this.city.set(city);
    }

    public StringProperty cityProperty() {
        return city;
    }

}




Модуль rootLayoutController:

Код: 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.
package postidx.view;

import java.io.IOException;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import postidx.MainApp;
import postidx.view.postidxOverviewController;

// Контроллер для корневого макета. Корневой макет предоставляет базовый
// макет приложения, содержащий строку меню и место, где будут размещены
// остальные элементы JavaFX
public class rootLayoutController {
	
    // Ссылка на главное приложение
    @SuppressWarnings("unused")
	private MainApp mainApp;
    
    // Ссылка на контроллер
    private postidxOverviewController postidxController;

    public rootLayoutController () {
    	
    }
    
    // Открывает панель быстрого поиска
    @FXML private void mniQuickSearch(ActionEvent ae) throws IOException {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/postidxOverview.fxml"));
	    postidxController = loader.getController();
        postidxController.ShowCloseQuickSearchPane();
    }
    
    // Открывает форму поиска
    @FXML private void mniFind(ActionEvent ae) {
        try {
            new frmFind();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // Открывает диалоговое окно About
    @FXML private void mniAbout() {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setTitle("Почтовые индексы субъектов Российской Федерации");
        alert.setHeaderText("О программе");
        alert.setContentText("Почтовые индексы субъектов РФ\n"+
        		"версия 4.0\n\n"+
        		"Copyright (c) 2002-2018 by BSA Soft\n\n"+
        		"По данным сайта Почты России\n"+
        		"по состоянию на 18.12.2017 г.\n\n"+
        		"Website: http://bsasoft.ru\n"+
        		"E-mail: bsasoftrus@gmail.com");

        alert.showAndWait();
    }

    // Закрывает приложение
    @FXML private void mniExit() {
        System.exit(0);
    }

    // Вызывается главным приложением, чтобы оставить ссылку на самого себя
    public void setMainApp(MainApp mainApp) {
        this.mainApp = mainApp;
    }

}




Модуль postidxOverviewController:

Код: 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.
package postidx.view;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.function.Predicate;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
//import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
//import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.util.Callback;

import com.jfoenix.controls.JFXTreeTableColumn;
import com.jfoenix.controls.JFXTreeTableView;
import com.jfoenix.controls.RecursiveTreeItem;
import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
import com.jfoenix.controls.JFXButton;

import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;

import com.jfoenix.controls.JFXTextField;

import postidx.MainApp;
import postidx.model.postidx;

public class postidxOverviewController {

    // Данные в виде наблюдаемого списка индексов
    private ObservableList<postidx> data = FXCollections.observableArrayList();
    
    @FXML public JFXTreeTableView<postidx> postidxTable;
    @FXML public JFXTreeTableColumn<postidx, String> idx;
    @FXML public JFXTreeTableColumn<postidx, String> opsname;
    @FXML public JFXTreeTableColumn<postidx, String> region;
    @FXML public JFXTreeTableColumn<postidx, String> autonom;
    @FXML public JFXTreeTableColumn<postidx, String> area;
    @FXML public JFXTreeTableColumn<postidx, String> city;

    @FXML public AnchorPane anchorPane;
    
    @FXML public Pane quickSearchPane;
    @FXML public JFXTextField txtQuickSearch;
    @FXML public JFXButton btnClosePane;
    
	private String curdir = System.getProperty("user.dir");
	private String dataDb = "db/postidx.sqlite";
	private String url;
	private Properties properties = new Properties();
	
    public Connection con = null;
    public ResultSet rs = null;
    public Statement stmt = null;
    public String mainQueryStr = "SELECT idx, opsname, region, autonom, area, city FROM postidx";

    
    // Ссылка на главное приложение
	@SuppressWarnings("unused")
	private MainApp mainApp;
	// Ссылка на контроллер
	@SuppressWarnings("unused")
	private rootLayoutController rootLayoutController;
    
    // Конструктор
	public postidxOverviewController() {
	    //quickSearchPane = null;
	    //txtQuickSearch = null;
	    //btnClosePane = null;
    }

    // Инициализация класса-контроллера. Этот метод вызывается автоматически
	// после того, как fxml-файл будет загружен
	@SuppressWarnings("unchecked")
    @FXML private void initialize() {
    	
        // Инициализация таблицы
        try {
        	JFXTreeTableColumn<postidx, String> idx = new JFXTreeTableColumn<>("Индекс");
        	idx.setPrefWidth(75);
        	idx.setStyle("-fx-font-name: Liberation Serif;");
        	idx.setStyle("-fx-font-size: 11px;");
        	idx.setStyle("-fx-alignment: CENTER-LEFT;");
        	idx.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().idx;
        		}
        	});
        	
        	JFXTreeTableColumn<postidx, String> opsname = new JFXTreeTableColumn<>("Наименование ОПС");
        	opsname.setPrefWidth(350);
        	opsname.setStyle("-fx-font-name: Liberation Serif;");
        	opsname.setStyle("-fx-font-size: 11px;");
        	opsname.setStyle("-fx-alignment: CENTER-LEFT;");
        	opsname.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().opsname;
        		}
        	});
        	
        	JFXTreeTableColumn<postidx, String> region = new JFXTreeTableColumn<>("Регион");
        	region.setPrefWidth(200);
        	region.setStyle("-fx-font-name: Liberation Serif;");
        	region.setStyle("-fx-font-size: 11px;");
        	region.setStyle("-fx-alignment: CENTER-LEFT;");
        	region.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().region;
        		}
        	});
        	
        	JFXTreeTableColumn<postidx, String> autonom = new JFXTreeTableColumn<>("Автономная область");
        	autonom.setPrefWidth(190);
        	autonom.setStyle("-fx-font-name: Liberation Serif;");
        	autonom.setStyle("-fx-font-size: 11px;");
        	autonom.setStyle("-fx-alignment: CENTER-LEFT;");
        	autonom.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().autonom;
        		}
        	});
        	
        	JFXTreeTableColumn<postidx, String> area = new JFXTreeTableColumn<>("Район");
        	area.setPrefWidth(180);
        	area.setStyle("-fx-font-name: Liberation Serif;");
        	area.setStyle("-fx-font-size: 11px;");
        	area.setStyle("-fx-alignment: CENTER-LEFT;");
        	area.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().area;
        		}
        	});
        	
        	JFXTreeTableColumn<postidx, String> city = new JFXTreeTableColumn<>("Населенный пункт");
        	city.setPrefWidth(170);
        	city.setStyle("-fx-font-name: Liberation Serif;");
        	city.setStyle("-fx-font-size: 11px;");
        	city.setStyle("-fx-alignment: CENTER-LEFT;");
        	city.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<postidx, String>, ObservableValue<String>>() {
        		@Override
        		public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<postidx, String> param) {
        			return param.getValue().getValue().city;
        		}
        	});
        	
            initTable();
        	LoadDatasInTable(mainQueryStr);
        	//ShowCloseQuickSearchPane();
        	
		    final TreeItem<postidx> root = new RecursiveTreeItem<postidx>(data, RecursiveTreeObject::getChildren);
		    postidxTable.getColumns().setAll(idx, opsname, region, autonom, area, city);
		    postidxTable.setRoot(root);
		    postidxTable.setShowRoot(false);

		} catch (SQLException e) {
			e.printStackTrace();
		}
        //Быстрый поиск ро базе
    	txtQuickSearch.textProperty().addListener(new ChangeListener<String>() {
    		//@Override
    		public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
    			postidxTable.setPredicate(new Predicate<TreeItem<postidx>>() {
    				@Override
    				public boolean test(TreeItem<postidx> postidx) {
    					Boolean flag = postidx.getValue().idx.getValue().contains(newValue) || postidx.getValue().region.getValue().contains(newValue) ||
    							postidx.getValue().autonom.getValue().contains(newValue) || postidx.getValue().area.getValue().contains(newValue) ||
    							postidx.getValue().city.getValue().contains(newValue);
    					return flag;
    				}
    			});
    		}
    	});

    	// Слушатель базы. Если включить - отваливается соединение с базой
//        mainApp.getPostidxData().addListener(new ListChangeListener<postidx>() {
//        	
//        	@Override
//        	public void onChanged(Change<? extends postidx> c) {
//        		mainApp.getPostidxData();
//        	}
//        });
    }

    // Задаем св-ва соединения
    public void initTable() {
		try {
			this.url = "jdbc:sqlite:" + this.curdir + "/" + this.dataDb;
			properties.setProperty("useUnicode", "true");
			properties.setProperty("characterEncoding", "UTF-8");
			System.out.println(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    // Подключимся к базе и получим начальные данные
    public void LoadDatasInTable(String querystr) throws SQLException {
		try {
				Class.forName("org.sqlite.JDBC");
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			con = DriverManager.getConnection(url, properties);

            data.clear();
            stmt = con.createStatement();
            rs = stmt.executeQuery(querystr);
 
            try {
				while (rs.next()) {
				    String idx = rs.getString("idx");
				    String opsname = rs.getString("opsname");
				    String region = rs.getString("region");
				    String autonom = rs.getString("autonom");
				    String area = rs.getString("area");
				    String city = rs.getString("city");
				    data.add(new postidx(idx, opsname, region, autonom, area, city));
				}
            } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
        	// Если включить - соединение с базой отваливается и данные из таблицы пропадают
        	//closeConnection(con, stmt, rs);
		}
    }

    // Показать/скрыть панель быстрого поиска
    @FXML public void ShowCloseQuickSearchPane() {
    	
    	if (quickSearchPane.getParent().isVisible()) {
    		btnClosePane.setDisable(true);
    		txtQuickSearch.setText("");
    		txtQuickSearch.setDisable(true);
    		quickSearchPane.setOpacity(0.0F);
    	} else {
    		btnClosePane.setDisable(false);
    		txtQuickSearch.setText("");
    		txtQuickSearch.setDisable(false);
    		quickSearchPane.setOpacity(0.7F);
    	}
    }
    
    // Закрыть соединение с базой
    public void closeConnection(Connection con, Statement stmt, ResultSet rs) throws SQLException {
    	this.con = con;
    	this.stmt = stmt;
    	this.rs = rs;
    	
        con.close();
        stmt.close();
        rs.close();
    }
    
    // Вызывается главным приложением, которое даёт на себя ссылку
    public void setMainApp(MainApp mainApp) {
        this.mainApp = mainApp;
        
        // Добавление в таблицу данных из наблюдаемого списка
        //postidxTable.setTreeColumn((TreeTableColumn<postidx, ?>) mainApp.getPostidxData());
    }
    
}




Модуль frmFindController:

Код: 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.
package postidx.view;

import java.sql.SQLException;
import javax.swing.JOptionPane;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.stage.Stage;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXRadioButton;
import com.jfoenix.controls.JFXTextField;

import postidx.view.postidxOverviewController;

public class frmFindController {

    // Идентификаторы для формы поиска
    @FXML private javafx.scene.layout.Pane Pane;

    @FXML private Label lblFind;
    @FXML private JFXTextField txtFind;

    @FXML private ToggleGroup rgFind;
    @FXML private JFXRadioButton rbIdx;
    @FXML private JFXRadioButton rbNaimOPS;
    @FXML private JFXRadioButton rbRegion;
    @FXML private JFXRadioButton rbAutonom;
    @FXML private JFXRadioButton rbArea;
    @FXML private JFXRadioButton rbCity;

    @FXML private JFXButton btnOkFind;
    @FXML private JFXButton btnCancelFind;
    
    
    // Задаем строку поиска
    private String sqlStrFind;
    private String findSqlStr = "select idx, opsname, region, autonom, area, city from postidx where ";
    private String indexSqlStr = "[idx] like ";
    private String opsnameSqlStr = "[opsname] like ";
    private String regionSqlStr = "[region] like ";
    private String autonomSqlStr = "'[autonom] like ";
    private String areaSqlStr =  "[area] like ";
    private String citySqlStr = "[city] like ";
    private int resId;

 // Ссылка на контроллер модели
 	private postidxOverviewController controller;
 	
	public frmFindController() throws Exception {
	}

	@FXML
	private void initialize() {
		
	}
	
	@FXML
	private void rbSelected(ActionEvent ev) {
		switch ( ((RadioButton)ev.getSource()).getText() ) {
        	case "Индексу":
        		resId = 0;
        		break;
        	case "Наименованию ОПС":
        		resId = 1;
        		break;
        	case "Региону (область, край и т.п.)":
        		resId = 2;
        		break;
        	case "Автономной области":
        		resId = 3;
        		break;
        	case "Району, в котором находится ОПС":
        		resId = 4;
        		break;
        	case "Населенному пункту":
        		resId = 5;
        		break;
        	default:
        		break;
		}
		return;
	}
	
	@FXML
	private void btnOkFindClick() {
		if (!rbIdx.isSelected() & !rbNaimOPS.isSelected() & !rbRegion.isSelected() & !rbAutonom.isSelected()
				& !rbArea.isSelected() & !rbCity.isSelected()) {
			JOptionPane.showMessageDialog(null, "Не задана область поиска!");
			}
		if (txtFind.getText().trim().length() == 0) {
			JOptionPane.showMessageDialog(null, "Не задана строка поиска!");
		} else {
			switch ( resId ) {
           	case 0:
           		sqlStrFind = findSqlStr + indexSqlStr + txtFind.getText() + ";";
               	break;
           	case 1:
           		sqlStrFind = findSqlStr + opsnameSqlStr + "'%" + txtFind.getText().toUpperCase() + "%';";
               	break;
           	case 2:
           		sqlStrFind = findSqlStr + regionSqlStr + "'%" + txtFind.getText().toUpperCase() + "%';";
               	break;
           	case 3:
           		sqlStrFind = findSqlStr + autonomSqlStr + "'%" + txtFind.getText().toUpperCase() + "%';";
               	break;
           	case 4:
           		sqlStrFind = findSqlStr + areaSqlStr + "%" + txtFind.getText().toUpperCase() + "%;";
               	break;
           	case 5:
           		sqlStrFind = findSqlStr + citySqlStr + "'%" + txtFind.getText().toUpperCase() + "%';";
               	break;
           	default:
           	break;
			}
		}
		controller = new postidxOverviewController();
		try {
			//controller.closeConnection(controller.con, controller.stmt, controller.rs);
			controller.initTable();
			controller.LoadDatasInTable(sqlStrFind);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			btnCancelFindClick();
		}
	}

	@FXML
	public void btnCancelFindClick() {
        try {
        	Stage stage = (Stage) btnCancelFind.getScene().getWindow();
        	stage.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
	} 
}




Комментарии в коде, где что - присутствуют.
Так вот: в модуль postidxOverview.fxml (в нем находится таблица) добавил панель (Pane) для быстрого поиска, на которой разместил 2 контрола: текстовое поле и кнопку для закрытия панели. Сам быстрый поиск, пока панель видна, работает исправно. В контроллере postidxOverviewController присутствует метод, который при запуске программы и показе таблицы скрывает панель с контролами.
В контроллере rootLayoutController есть код, отрабатывающий событие нажатия кнопки мыши на пункте меню показа панели быстрого запуска. Сам метод показа панели находится, как написано выше, в контроллере postidxOverviewController. Так вот, при попытке вызвать метод (ссылка на контроллер есть), прога вываливается по Exception'у:
Exception:

Код: 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.
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$6(ContextMenuContent.java:1358)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
	at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
	at com.sun.glass.ui.View.notifyMouse(View.java:937)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
	... 43 more
Caused by: java.lang.NullPointerException
	at postidx.view.rootLayoutController.mniQuickSearch(rootLayoutController.java:35)
	... 53 more




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

Вопрос поиска тоже актуален. Теперь поиск, вроде как отрабатывает без ошибок, но результата я не наблюдаю в таблице.
Слушатель для таблицы есть, работать, по идее, должен на изменения в таблице, но если его включить, подключение к базе отваливается. В каментах в коде я об этом написал.

Бьюсь уже больше недели в поисках решения. Ткните носом, где я ошибаюсь.
В коде использовал библиотеку JFoenix: https://github.com/jfoenixadmin/JFoenix .
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39608256
duponamk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю только, что прогу переписывал по этому учебнику: http://code.makery.ch/library/javafx-8-tutorial/ru/part1/
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39608262
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkпереписал прогу на JavaFX.переписывайте обратно.
Вы так и не научились коротко формулировать вопрос и код.
Кому интересны ваши геттеры, стили и пункты меню приложения?
Где биндинг коллекции?
Удачи!
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39608263
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkБьюсь уже больше недели в поисках решения.Сложно вам будет. Чем дельфи не устроил?
Если вы даже не поняли что тему топика надо поменять.
Технологии поменялись!!!
...
Рейтинг: 0 / 0
Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
    #39608265
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
duponamkдобавил панель (Pane) для быстрого поиска, на которой разместил 2 контрола: текстовое поле и кнопку для закрытия панели. Сам быстрый поиск, пока панель видна, работает исправно. В контроллере postidxOverviewController присутствует метод, который при запуске программы и показе таблицы скрывает панель с контролами.
В контроллере rootLayoutController есть код, отрабатывающий событие нажатия кнопки мыши на пункте меню показа панели быстрого запуска. Сам метод показа панели находится, как написано выше, в контроллере postidxOverviewController. Так вот, при попытке вызвать метод (ссылка на контроллер есть), прога вываливается по Exception'у:
Все это замени контролом виджетом свернуть/развернуть.
Даже в дельфи он есть.
Остальное не читал, т.к. ты даже About сюда вывалил.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск в базе sqlite в одной форме и вывод результатов в jtable в другой форме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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