java - 在 JFRAME 中制作数基转换器

标签 java swing jframe converters

所以我有一个 JFrame 文件,其中包含 3 个文本框,一个“转换!”和一个“清除”按钮。 3个文本框分别用于输入十六进制——十进制——二进制的数字。您可以在与该特定数基相关的任何字段中输入内容,它会将该数基转换为其他 2 个数基。

我的问题是:如何检测我应该从哪个数字基数进行转换?例如,如果有人进行转换,并想要再次转换,并且他为任何数字基数输入另一个值,以便其中 2 个值在数字基数中相等,而一个则不同,则程序会困惑,因为它不会不知道要转换哪一个。我该如何解决这个问题。如果有人正在进行第一次转换,我将如何检测教科书中是否有文本。抱歉,我是 jframes 的新手,我几乎不知道语法。

最佳答案

您可以向每个 JTextField 添加一个 DocumentFilter 来执行转换:

DocumentFilter hexFilter = new DocumentFilter(){

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        super.replace(fb, offset, length, text, attrs);
        String hexInput = hexTextField.getText();
        //process hex input
    }
};
((AbstractDocument) hexTextField.getDocument()).setDocumentFilter(hexFilter);

每次用户在文本字段中插入文本时,都会调用 replace 方法。

您只需从文本字段中获取输入并进行处理即可。

I'm having this problem because there are 3 text fields and I don't know how I can "detect" in which textbox the user has made an input.

您可以向每个文本字段添加不同的DocumentFilter,这样您将始终知道用户正在写入哪个文本字段。

类似于:

((AbstractDocument) hexTextField.getDocument()).setDocumentFilter(hexFilter);
((AbstractDocument) octTextField.getDocument()).setDocumentFilter(octFilter);
((AbstractDocument) binTextField.getDocument()).setDocumentFilter(binFilter);

这样,您将始终知道 binFilter 处理二进制输入,octFilter 处理八进制输入,hexFilter 处理十六进制输入。

<小时/>

另一种选择是使用KeyListener,但据我所知,当您在文本字段中粘贴一些文本时它不会使用react。

关于java - 在 JFRAME 中制作数基转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208765/

相关文章:

java - 程序因文本字段为空而崩溃

java - Criteria Builder 中的 Join 中的 getOn 不起作用

Java - 是否可以将 JLayeredPane 放入 JScrollPane 中?

java - JTextField 数字从左到右的顺序

java - 为什么当我按下退出键时框架没有关闭?

java - 在 Java 中调用 Grep 会给出错误的结果,而在 shell 中调用 grep 会给出正确的结果

java - 合并父实体时,OneToMany 中所有子实体的版本都会增加

java - 无法实例化类型 actionlistener?

Java Swing : get index of combobox inside table

java - 基本 Java Swing JFrame 重绘