Я пишу библиотечную систему, которая в настоящее время взаимодействует с базой данных. Функция, которую я хочу: каждый раз, когда я нажимаю JButton «lobBut», JTable «table» будет показывать новейший контент. Используя следующий код, я могу реализовать эту функцию. ОДНАКО, есть задержка в показе JTable. Чтобы сделать вещи более странными, если я нажимаю на другие приложения (например, Chrome или любой другой), JTable будет отображаться незамедлительно. Может ли кто-нибудь помочь мне преодолеть эту проблему? Спасибо!JButton invused JTable появляется в задержке
JButton lobBut = new JButton("List of Books");
lobBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
centerPanel.removeAll();
JTable bookTable = new JTable(BookTableModel.getTableModel("SELECT * FROM books"));
JScrollPane pane = new JScrollPane(bookTable);
bookTable.setPreferredScrollableViewportSize(new Dimension(600, 70));
bookTable.setFillsViewportHeight(true);
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) bookTable.getTableHeader().getDefaultRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);
bookTable.setShowGrid(true);
bookTable.setGridColor(Color.GREEN);
bookTable.setVisible(true);
centerPanel.add(pane);
}
});
Вот класс BookTableModel:
public class BookTableModel extends AbstractTableModel{
private String[] columnNames = {};
private Object[][] data = {};
public int getColumnCount(){
return columnNames.length;
}
public int getRowCount(){
return data.length;
}
public Object getValueAt(int row, int col){
return data[row][col];
}
public String getColumnName(int col){
return columnNames[col];
}
public Class getColumnClass(int c){
return getValueAt(0, c).getClass();
}
public static DefaultTableModel getTableModel(String sql){
try(
Statement stmt = ConnectionManager.getInstance().getConnection().createStatement();
ResultSet rs = stmt.executeQuery(sql);
){
ResultSetMetaData metaData = rs.getMetaData();
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for(int column = 1; column <= columnCount; column++){
columnNames.add(metaData.getColumnName(column));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while(rs.next()){
Vector<Object> vector = new Vector<Object>();
for(int columnIndex = 1; columnIndex <= columnCount; columnIndex++){
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
return new DefaultTableModel(data, columnNames);
}catch(SQLException e){
System.err.print(e);
return null;
}
}
}
Спасибо! Я хочу жениться на тебе! –
Это не соответствующее использование 'updateUI()'; вместо этого реализуйте 'validate()' охватывающий контейнер. – trashgod