05. august 2003 - 12:53Der er
4 kommentarer og 1 løsning
Automatisk scroll på JTable
Jeg har lavet en tabel (JTable), og fyldt den med data. Brugeren kan sortere de enkelte rækker ved at trykke på TableHeaderens overskrifter, og ud fra nogle kriterier findes den række der er tættest på det brugeren ønsker. Når jeg har fundet rækken, afmærker jeg den med minTabel.setRowSelectionInterval(int, int), og det hele virker fint.
MEN som oftest er resultatet længere nede i tabellen end det er muligt at vise direkte, og brugeren må derfor selv scrolle ned til det afmærkede resultat for at se det. Er der ikke mulighed for automatisk at få scrollet det afmærkede resultat op eller ned så det er synligt uden at brugeren selv skal scrolle hen til det? Hvordan gøres det nemmest hvis man kan?
Jeg har lavet et lille eksempel, så kan du pille det ud, som du skal bruge
Brug knapperne og tilføj nogle hunderede rækker og prøv det
import javax.swing.*; /** * * @author Carsten Hansen */ public class ScrollToRow extends javax.swing.JFrame {
public ScrollToRow() { initComponents(); }
private void initComponents() { jPanel1 = new javax.swing.JPanel(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable();
private void addTableRows(java.awt.event.ActionEvent evt) { javax.swing.table.DefaultTableModel model; model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
Object[] rowData = new Object[]{null,null,null,null}; String s = JOptionPane.showInputDialog(this,"Skriv antal rækker som skal tilføjes"); int i = Integer.parseInt(s);
for(int x = 0; x < i; x++){ model.addRow(rowData); } }
// DET ER HER DET SKER private void myChoice(java.awt.event.ActionEvent evt) { String s = JOptionPane.showInputDialog(this,"Hvilken række skal vælges"); int i = Integer.parseInt(s); if(i <= jTable1.getRowCount()){ jTable1.setRowSelectionInterval(i, i);
java.awt.Rectangle rect = jScrollPane1.getViewportBorderBounds(); double h = rect.getHeight(); int move = jTable1.getSelectedRow() * jTable1.getRowHeight() - (int)h + jTable1.getRowHeight(); scroll = jScrollPane1.getVerticalScrollBar(); scroll.setValue(move); } }
Men det var nu ikke nødvendigt, hvis jeg mente 30 point var for lidt, havde jeg nok ikke svaret - men jeg skulle selv bruge det til en anden opgave, så jeg fremskyndede det bare og det lykkedes jo.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.