【发布时间】:2015-03-28 03:17:32
【问题描述】:
我在按钮被禁用的地方做了它,启用它的唯一方法是在字段中输入文本。
这是我的代码:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
class checkText extends DocumentFilter {
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, text, attrs);
main.enableButton();
}
}
public class main extends JFrame {
static JFrame inputFrame = new JFrame();
static JTextField myTextfield = new JTextField(10);
static JButton myButton = new JButton("Test");
public main() {
inputGUI();
}
private static void inputGUI() {
inputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inputFrame.setTitle("The INPUT");
inputFrame.setLayout(new FlowLayout());
inputFrame.setSize(640, 480);
inputFrame.setVisible(true);
inputFrame.setLocationRelativeTo(null);
inputFrame.add(myButton);
DocumentFilter filter = new checkText();
((AbstractDocument) myTextfield.getDocument()).setDocumentFilter(filter);
inputFrame.add(myTextfield);
myButton.setEnabled(false);
}
public static void enableButton() {
myButton.setEnabled(true);
}
public static void main(String args[]) { new main(); }
}
每当我退格并删除所有文本时。该按钮仍处于活动状态。当字段内没有文本时如何禁用它?
【问题讨论】:
-
你能得到输入的长度吗?如果它的长度为零,则禁用它
-
@PeerNet:可以,但是很复杂。仅在过滤器的方法中检查 Document 是不够的。您还必须检查 super 方法对 Document 的作用。这就是为什么使用 DocumentListener 会简单得多。
-
Kerperlo:将来,请考虑在您的代码中使用缩进。您的平面代码很难阅读和解析。
-
我注意到您已经问了几个标题格式为 "Java [检查文本退格问题]" 的问题。主要标签会自动作为页面标题的前缀,因此不应包含在问题标题中。这使得方括号变得不必要。所以标题应该是"Checking Text Backspace Issue".
标签: java swing jbutton jtextfield documentfilter