JTextArea
用户键入时有什么方法可以用来隐藏文本?
有点像密码
在JTextArea
我有..
密码:
在最后一行中,该行中的任何用户类型都不应该可见。
我尝试使用setForeground
将字体颜色设置为textarea颜色的方法,该颜色使文本不可见,但允许用户复制和粘贴。
有没有解决方法,或者我该如何实现?
请帮忙
这就是我在评论中谈论的内容。请注意,这只是一个简单的示例(可能想安全地存储密码等),但是应该可以帮助您入门。
这段代码只是在DocumentFilter
上放了一个,JTextArea
并且永远不允许在其中添加密码字符Document
。而是将它们重新路由到其他地方。这类似于期望敏感输入的控制台的行为。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;
public class CapturePassword extends JFrame {
private JScrollPane scroll;
private JTextArea textArea;
private JToggleButton expectPassword;
private StringBuilder password; // you would of course use something else
public CapturePassword() {
setLayout(new BorderLayout());
password = new StringBuilder();
textArea = new JTextArea();
scroll = new JScrollPane(textArea);
add(scroll);
expectPassword = new JToggleButton("Capture password");
add(expectPassword, BorderLayout.PAGE_END);
expectPassword.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (expectPassword.isSelected()) {
capture(true);
} else {
capture(false);
JOptionPane.showConfirmDialog(
CapturePassword.this,
"Captured password: " + password.toString(),
"Password!", JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE);
password.setLength(0); // reset
}
textArea.requestFocusInWindow();
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 400);
setLocationRelativeTo(null);
}
private void capture(boolean start) {
PlainDocument document = (PlainDocument)textArea.getDocument();
DocumentFilter filter = new DocumentFilter() {
private void doAppend(String text) {
if (text.endsWith("\n")) {
expectPassword.doClick();
} else {
password.append(text);
}
}
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
// you would have to handle multi-line pastes here also
doAppend(text);
}
@Override
public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException {
// cannot remove while filtering
}
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
doAppend(text);
}
};
document.setDocumentFilter(start ? filter : null);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new CapturePassword().setVisible(true);
}
});
}
}
问题内容: 有没有一种可靠的方法来计算字符串如何在JTextArea中划分为行? 我有一个固定宽度的JTextArea,当它被填充时,会添加一个新行并垂直扩展。 现在,我需要确切地知道哪一行中的字符。我可以使用字体指标来计算单个字符的宽度,但是我不知道这是否可靠,或者是否有更好的方法。 字体指标是“绝招”吗? 问题答案: 所有JTextComponent都具有和可以提供帮助的方法,但也许更好的是j
有没有可靠的方法来计算一个字符串在JTextArea中是如何划分成行的? 我有一个固定宽度的JTextArea,当它被填充时,就会添加一个新行,并且它会垂直扩展。 现在,我需要确切地知道哪些字符在哪一行。我可以使用字体度量来增加单个字符的宽度,但我不知道这是否可靠,或者是否有更好的方法。 字体度量“诡计”是唯一的方法吗?
问题内容: 我尝试在运行时中显示一些文本。但是,当我使用的循环来按顺序显示文本时,它仅显示最后一个循环的文本。这是我的代码: 我要显示它。但只显示一次“ ” 有人可以为我解释吗? 问题答案: 做到这一点,它将“字段的文本”设置为您提供的值,从而删除所有先前的内容。 你想要的是 如果您使用的是Java 8,则另一个选择可能是 (假设您想在每次调用该方法时替换文本,但仍然可以使用) 根据评论的假设进行
介绍 (Introduction) JTextArea类是一个显示纯文本的多行区域。 Class 声明 (Class Declaration) 以下是javax.swing.JTextArea类的声明 - public class JTextArea extends JTextComponent 类构造函数 (Class Constructors) Sr.No. 构造函数和描述 1 JTe
主要内容:1 Java JTextArea的介绍,2 Java JTextArea的声明,3 Java JTextArea的构造方法,4 Java JTextArea的方法,5 Java JTextArea的案例1,6 Java JTextArea的案例21 Java JTextArea的介绍 JTextArea类的对象是显示文本的多行区域。它允许编辑多行文本。它继承了JTextComponent类。 2 Java JTextArea的声明 我们来看一下javax.swing.JTextArea
问题内容: 我在JTabbedPane中的(多个)JScrollPane中有一个JTextArea。 我需要访问JTextArea。如果没有JScrollPane,则可以执行以下操作: 在JScrollPane中如何获取? 干杯,瞪羚。 问题答案: 这条线看起来很复杂,但是我 认为 可以做到这一点。 但是我认为将您的存储在一个。 因此,您可以执行以下操作: 创建一个新的是这样的: 希望这可以帮助。