有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java UpdateComponentTreeUI更改JTextField中的光标位置

当我对非空的JTextField使用updateComponentTreeUI时,光标的位置会从文本的末尾移到前面,如给定的示例所示。有谁能想出一个原因,一个解决办法,或者经历过这种情况吗?由于我在许多不同的类中有许多文本字段,因此如果能提供一个全局解决方案,而不在每个文本字段中添加侦听器,我将不胜感激。下面是一个简单的例子:

import java.awt.*;
import java.awt.Dialog.*;
import java.awt.event.*;
import java.lang.reflect.*;
import javax.swing.*;

public class DialogTest {
    final JFrame frame = new JFrame("DialogTest");
    JDialog dlg;

    public DialogTest() {
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(new JButton(action1), BorderLayout.NORTH);
        frame.add(new JButton(action2), BorderLayout.CENTER);
        frame.pack();
        frame.setLocation(200, 200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                @Override
                public void run() {
                    new DialogTest();
                }
            });
        } catch (InvocationTargetException | InterruptedException e1) {
        }

    }

    private void setStuff() {
        dlg = new JDialog(frame, "Dialog", ModalityType.DOCUMENT_MODAL);
        dlg.getContentPane().setLayout(new BorderLayout());
        dlg.getContentPane().add(new JTextField("test 123", 20), BorderLayout.NORTH);
        dlg.getContentPane().add(new JTextField("Bla bla bla bla bla", 20), BorderLayout.CENTER);
        dlg.getContentPane().add(new JButton(new AbstractAction("Close") {

            @Override
            public void actionPerformed(ActionEvent e) {
                dlg.setVisible(false);
            }

        }), BorderLayout.SOUTH);
        dlg.setLocation(250, 250);
    }

    final Action action1 = new AbstractAction("Dialog") {

        @Override
        public void actionPerformed(ActionEvent e) {
            setStuff();
            dlg.pack();
            dlg.setVisible(true);
        }

    };

    final Action action2 = new AbstractAction("UpdateComponentTree") {

        @Override
        public void actionPerformed(ActionEvent e) {
            setStuff();
            SwingUtilities.updateComponentTreeUI(dlg);
            dlg.pack();
            dlg.setVisible(true);
        }

    };

}

共 (0) 个答案