我使用的JScrollPane
容器中有JPanel
。
在JPanel内部有许多标签和JTextFields
。现在最后一个JTextField在开始时没有显示,我想使用TAB按钮来显示它,并且还有垂直滚动条滚动到它。
我试过
DefaultCaret caret = (DefaultCaret) textField.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
还有:
scrollRectToVisible( textField.getBounds() );
'
没有工作:(
这是代码:
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
InsertNewOrderWindow frame = new InsertNewOrderWindow();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public InsertNewOrderWindow() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 903, 1001);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane(panel , JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(300, 577));
contentPane.add(scrollPane);
...... // gridBag stuff
textField = new JTextField();
textField.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent arg0) {
DefaultCaret caret = (DefaultCaret) textField.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
}
});
... // gridBag stuff
panel.add(textField, gbc_textField_19);
...
} //InsertNewOrderWindow() method
如何自动滚动到可聚焦的jtextfield?
答案 0 :(得分:3)
如何自动滚动到可聚焦的jtextfield?
查看Scrolling a Form以获得简单的解决方案。
该类使用KeyboardFocusManager
侦听焦点更改,然后确保具有焦点的组件显示在滚动窗格的视口中。