기금넷 공식사이트 - 주식 지식 - JAVA 스크롤바 자동 스크롤 문제에 대해

JAVA 스크롤바 자동 스크롤 문제에 대해

java.io.* 가져오기;

java.util.Hashtable 가져오기;

java.util.Vector 가져오기;

가져오기 javax.swing.*;

javax.swing.table.AbstractTableModel 가져오기;

java.awt.* 가져오기;

java.awt.event 가져오기. ActionEvent;

java.awt.event.ActionListener 가져오기;

java.awt.event.AdjustmentEvent 가져오기;

java.awt.event.AdjustmentListener 가져오기;

공용 클래스 T는 JFrame을 확장합니다. {

/**

* @param args

* @throws 예외

*/

public static void main(String[] args) throws Exception {

// TODO 자동 생성 메서드 스텁

new T() ;

}

JButton btnA = new JButton("add");

JTable 탭 = new JTable();

JScrollBar bar = new JScrollBar();

JScrollPane sp = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

int row = 0;

Vector< Hashtable> data = new Vector>();

int 페이지;

int totalPage;

int pageSize = 20;

int displayCount;

public T() {

super("table");

this.setSize (400,400);

this.setLayout(new BorderLayout());

this.add(btnA,BorderLayout.SOUTH);

JPanel p = new JPanel(new BorderLayout());

//p.add(sp,BorderLayout.CENTER);

//p.add(bar,BorderLayout.EAST); p>

bar.addAdjustmentListener(new adjustmentListener() {

public void adjustValueChanged(Adjustmen

tEvent e) {

page = bar.getValue();

System.out.println(e.getAdjustmentType());

새로 고침(false) ;

}

});

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. CENTER);

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 = new Hashtable();

h.put("a", "aa");

h.put("b", "bb" );

data.add(h);

새로 고침(true);

bar.setValue(page);

bar .setMaximum(totalPage);

bar.revalidate();

bar.repaint();

}

});

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setVisible(true);

}

void Refresh(boolean end) {

totalPage = data.size()/pageSize;

if(data.size()%pageSize!=0)totalPage++;

if(end) page = totalPage;

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( )+","+totalPage+","+page+","+displayCount)

;

tab.revalidate();

this.repaint();

}

클래스 TModel은 AbstractTableModel을 확장합니다. {

public int getColumnCount() {

return 2;

}

public int getRowCount() {

return displayCount ;

}

public Object getValueAt(int rowIndex, int columnIndex) {

int dataIndex = (page-1)*pageSize+rowIndex;

if(dataIndex>=data.size()||dataIndex<0)return null;

else {

Hashtable h = data.get (dataIndex);

스위치(columnIndex) {

케이스 0:return h.get("a");

케이스 1:return h.get ("b");

기본값: null 반환;

}

}

}

}

}

스크롤바 이벤트 모니터링에 대해 한 페이지 이상 추가할 때 잘 모르기 때문에 더 이상 하고 싶지 않고 이대로 놔두겠습니다. 데이터를 사용하려면 페이지를 변경하기 전에 두 번째 항목을 추가해야 합니다. 일반적인 효과가 원하는 것인지 확인하세요.