Acerca del problema del desplazamiento automático de las barras de desplazamiento JAVA
importar java.io.*;
importar java.util.Hashtable;
importar java.util.Vector;
importar javax.swing.*;
importar javax.swing.table.AbstractTableModel;
importar java.awt.*;
importar java.awt.event. ActionEvent;
importar java.awt.event.ActionListener;
importar java.awt.event.AdjustmentEvent;
importar java.awt.event.AdjustmentListener;
la clase pública T extiende JFrame {
/**
* @param args
* @throws Excepción
*/
public static void main(String[] args) throws Exception {
// TODO Código auxiliar de método generado automáticamente
new T() ;
}
JButton btnA = new JButton("add");
JTable tab = new JTable();
JScrollBar bar = new JScrollBar();
JScrollPane sp = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
int row = 0;
Vector< Hashtable
int página;
int totalPage;
int pageSize = 20;
int displayCount;
public T() {
super("tabla");
this.setSize (400,400);
this.setLayout(new BorderLayout());
this.add(btnA,BorderLayout.SOUTH);
JPanel p = nuevo JPanel(new BorderLayout());
//p.add(sp,BorderLayout.CENTER);
//p.add(bar,BorderLayout.EAST); p p>
bar.addAdjustmentListener(new AjusteListener() {
ajuste público vacíoValueChanged(Ajustes
tEvent e) {
página = bar.getValue();
System.out.println(e.getAdjustmentType());
actualizar(falso) ;
}
});
bar.setUnitIncrement(1);
bar.setMinimum(1);
bar.setMaximum(1);
bar.setValue(1);
sp.setViewportView(tab);
//sp. setVerticalScrollBar(bar);
//sp.revalidate();
//bar.revalidate();
p.add(sp,BorderLayout. CENTRO);
p.add(bar,BorderLayout.EAST);
this.add(p,BorderLayout.CENTER);
tab.setModel( new TModel());
btnA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Hashtable
h.put("a", "aa");
h.put("b", "bb" );
data.add(h);
refresco(true);
bar.setValue(página);
barra .setMaximum(totalPage);
bar.revalidate();
bar.repaint();
}
});
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}
actualización nula (final booleano) {
totalPage = data.size()/pageSize;
if(data.size()%pageSize!=0)totalPage++;
if(end) página = página total;
displayCount = (data.size()-(page-1)*pageSize)>pageSize?pageSize:data.size()-(page-1)*pageSize;
if(page==0)displayCount = 0;
System.out.println(displayCount);
//System.out.println(data.size( )+","+páginatotal+","+página+","+displayCount)
;
tab.revalidate();
this.repaint();
}
clase TModel extiende AbstractTableModel {
public int getColumnCount() {
return 2;
}
public int getRowCount() {
return displayCount ;
}
objeto público getValueAt(int rowIndex, int columnIndex) {
int dataIndex = (page-1)*pageSize+rowIndex;
if(dataIndex>=data.size()||dataIndex<0)return null;
else {
Hashtable
switch(columnIndex) {
caso 0:return h.get("a");
caso 1:return h.get ("b");
predeterminado:return null;
}
}
}
}
}
Ya no quiero hacerlo, simplemente déjalo así, porque no sé mucho sobre el monitoreo de eventos de la barra de desplazamiento al agregar más de una página. datos, debe agregar uno segundo antes de cambiar la página. Verá si el efecto general es el que desea.