class LazyTableModel extends AbstractTableModel { private List<List<String>> data; public LazyTableModel() { data = new ArrayList<>(); } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return data.get(0).size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data.get(rowIndex).get(columnIndex); } public void loadVisibleData(int startIndex, int endIndex) { } } JTable table = new JTable(new LazyTableModel()); JScrollPane scrollPane = new JScrollPane(table); scrollPane.getViewport().addChangeListener(e -> { JViewport viewport = (JViewport) e.getSource(); int startIndex = table.rowAtPoint(viewport.getViewPosition()); int endIndex = table.rowAtPoint(new Point(viewport.getViewPosition().x, viewport.getViewPosition().y + viewport.getHeight())); ((LazyTableModel) table.getModel()).loadVisibleData(startIndex, endIndex); }); Class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value != null) { setText(value.toString()); } else { setText(""); } return this; } } table.setDefaultRenderer(Object.class, new MyRenderer()); Class MyEditor extends DefaultCellEditor { public MyEditor() { super(new JTextField()); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value != null) { ((JTextField) editorComponent).setText(value.toString()); } else { ((JTextField) editorComponent).setText(""); } return editorComponent; } } table.setDefaultEditor(Object.class, new MyEditor());


上一篇:
下一篇:
切换中文