Таблица перекрытия Java JTable после второго нажатия кнопки - PullRequest
0 голосов
/ 08 ноября 2018

Когда я нажал кнопку, все в порядке. Но если я выберу другую дату и снова нажму кнопку, таблица пересекается и выглядит странно.

Где моя ошибка? Коды действий моей кнопки здесь:

btnBilgileriGetir.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent arg0) {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			Connection con= DriverManager.getConnection("jdbc:mysql://xxxx.com:3306/xxxx", "xxxx", "xxxx");
			
			Date chosenDate = new Date();
			chosenDate = dateChooser.getDate();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String tarih=sdf.format(chosenDate);
			
			String query = "SELECT * FROM `dailyData` WHERE tarih='" + tarih + "' ORDER BY `number`";
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			
			contentPane.add(table);
			JScrollPane scrollTable;
			scrollTable = new JScrollPane(table);
			scrollTable.setBounds(72, 95, 1236, 513);
			scrollTable.setVisible(true);
			getContentPane().add(scrollTable);
			
			if(model.getColumnCount() == 0)
			{
				model.addColumn("Tarih");
				model.addColumn("Numara");
				model.addColumn("Litre");
			}			
			
			while(rs.next())
			{
				String sTarih = String.valueOf(rs.getDate(1));
				String sNumara = String.valueOf(rs.getInt(2));
				String sLitre = String.valueOf(rs.getDouble(3));				
				
				model.addRow(new Object[]{sTarih, sNumara, sLitre});
			}

			
			table.setModel(model);
			model.fireTableDataChanged();		    
			
		} catch (Exception e) {
			System.out.println(e);
		}
	}
});

1 Ответ

0 голосов
/ 08 ноября 2018

. Но если я выберу другую дату и снова нажму кнопку, таблица пересекается и выглядит странно.

getContentPane().add(scrollTable);

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

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

Затем, чтобы изменить данные, вам нужно варианты.

  1. лучше всего просто изменить модель таблицы, используя метод setModel (...) Table

  2. другой вариант - изменить компонент в области просмотра области прокрутки. Это делается с помощью метода setViewportView(...) из JScrollPane. Итак, вы создаете новый JTable и добавляете его в окно просмотра.

Таким образом, ваша логика ActionListener теперь будет просто создавать TableModel или TableModel и JTable, в зависимости от того, какой подход вы используете. Первый подход проще, поскольку вы создаете только один новый объект.

...