【问题标题】:--Invisible, Not visible, but editable JTextField--不可见,不可见,但可编辑 JTextField
【发布时间】:2017-09-26 11:48:48
【问题描述】:

如何制作可编辑但不可见的文本字段?我需要为我的程序提供参数,但我不希望用户看到他们实际输入的内容。如果我将它设置为不可见,我也无法编辑它的内容。我试着让它像这样透明: Making a JButton invisible, but clickable? 但由于某种原因,文本字段仍然显示。我也尝试使用分层窗格,但我只能将文本字段放在它们之上,而不是相反,NetBeans 只是移动它们,所以一切都合适。

我对其他想法持开放态度,输入是一个字符串,后跟一个“enter”。

我想我问错了问题。问题不在于文本可见,而是整个文本字段可见。输入是来自条形码阅读器的字符串,因此根本不需要显示任何内容。

编辑:我们以不同的方式解决了它。我们在背景图像的顶部添加了一条白线,将文本字段放在那里,并将其所有颜色都更改为白色。

【问题讨论】:

标签: java netbeans jtextfield invisible


【解决方案1】:

我认为您可以将 JPasswordField 用于您的目的,用户可以看到他写的字符数但看不到内容

https://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html

新想法:

你可以在你的 jtextfield 中添加一个 changelistener,当用户写入任何字符时,它会通过 append 方法保存到 StringBuilder 中,然后将 Jtextfield 自动设置为 null 以清除 jtextfield

这样,用户写入的所有字符都将存储在 StringBuilder 中,当他单击输入按钮时,您将获得用户将字符写入字符的字符串

那么你只需要调用StingBuilder的toString()方法就可以得到完整的String

【讨论】:

  • 并非如此。它解决了问题,用户看不到他们的输入,但我不希望他们看到任何东西。在设计意义上,在某个地方有一个字段,数据是自动写入的,这看起来很愚蠢。但它作为“没有别的”解决方案很好。
  • 我想我问错了。问题不在于文本可见,而是整个文本字段可见。输入是来自条形码阅读器的字符串,因此根本不需要显示任何内容。
  • 啊,好吧,所以我认为您可以在构造函数中使用字符串参数从条形码阅读器传递字符串,而不是存储在 UIComponent 中
【解决方案2】:

我认为将 keylistener 添加到 jpanel 可以解决您的问题,请尝试以下操作:

String str = ""; // global
public void yourMethod() {
    JFrame yourFrame = new JFrame();
    JPanel yourPanel = new JPanel();
    yourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    yourFrame.add(yourPanel);
    yourPanel.addKeyListener(new KeyListener() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
                System.out.println(str);// here you can use switch for cases that you want or whatever you want  to do with string, I simply print it out
                str = "";
            } else {
                str += e.getKeyChar();                    
            }
        }
        @Override
        public void keyTyped(KeyEvent e) {
        }
        @Override
        public void keyReleased(KeyEvent e) {
        }
    });
    // jpanel must be focused if you want key listener to work
    yourPanel.setFocusable(true);
    yourPanel.requestFocusInWindow();

    yourFrame.setSize(300, 250);
    yourFrame.setVisible(true);

}

【讨论】:

  • 只要输入来自键盘,它就可以工作。阅读器给出了回车效果,但没有给出字符串。但是,我们以不同的方式解决了这个问题,更新了问题。
【解决方案3】:

首先我知道我迟到了,这对你没有任何帮助,但也许对其他人有用。

我所做的只是将文本字段设置在角落并将宽度和高度都设置为 1(像这样:TextField.setBounds(0, 0, 1, 1);) 这使得它几乎不可能被看到。这使您仍然可以使用它。我知道这在技术上不会使它不可见,但它非常接近。

【讨论】:

  • 忽略“隐形”要求,您没有回答问题,因此可能会被否决。我建议在评论而不是答案中发布这种类型的想法,以避免被否决。您的想法可能对某些人有用,但仍会被看到。
  • 问题不是真正的“不可见”,而是“不可见”,所以用户仍然可以使用伪键盘,但看不到他们在做什么(磁卡读卡器在这种情况。)但是,由于您必须拥有 50 名声望才能发表评论,因此您甚至不能发表次要见解或注释。有点像你不能评论 CodeGolf 像“你在那里打了一个额外的空间,所以 -1 字节”。如果你问我,有点白痴。
猜你喜欢
  • 2010-11-19
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2014-04-04
  • 1970-01-01
相关资源
最近更新 更多