我有一个JTable可以由用户动态添加的行。它位于中JScrollPane,因此当行数足够大时,滚动器变为活动状态。我的愿望是,当用户添加新行时,滚动条将一直移动到底部,以便新行在滚动窗格中可见。我目前(下面的SSCCE)试图使用表模型侦听器来检测何时插入行,并在进行检测时将滚动条一直向下推。但是,由于模型已更新,但实际上尚未绘制新行,因此这种检测似乎“还为时过早”,因此发生的情况是,在插入新行之前,滚动条一直一直移动到底部,并且然后将新行插入到窗格末尾的下方(不可见)。
显然,这种方法在某种程度上是错误的。正确的方法是什么?
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
public class TableListenerTest {
private JFrame frame;
private JScrollPane scrollPane;
private JTable table;
private DefaultTableModel tableModel;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TableListenerTest window = new TableListenerTest();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TableListenerTest() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
JSplitPane splitPane = new JSplitPane();
frame.getContentPane().add(splitPane);
scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(100, 2));
splitPane.setLeftComponent(scrollPane);
宝慕林4294392
30秒到达战场
相关分类