如何自动滚动到可聚焦的JTextField的位置?

时间:2016-10-09 16:51:44

标签: java swing jscrollpane jtextfield autoscroll

我使用的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?

1 个答案:

答案 0 :(得分:3)

  

如何自动滚动到可聚焦的jtextfield?

查看Scrolling a Form以获得简单的解决方案。

该类使用KeyboardFocusManager侦听焦点更改,然后确保具有焦点的组件显示在滚动窗格的视口中。