Java 将值从文件读取到JTextField,并向另一个JTextField递增1
我正在制作一个ui,其中有两个JTextFields,我可以将数据从文本文件读取到 但是数据不会更新到JTextField2,除非 在JTextField1中输入数字。请引导 这是我的密码:Java 将值从文件读取到JTextField,并向另一个JTextField递增1,java,swing,jtextfield,documentlistener,documentfilter,Java,Swing,Jtextfield,Documentlistener,Documentfilter,我正在制作一个ui,其中有两个JTextFields,我可以将数据从文本文件读取到 但是数据不会更新到JTextField2,除非 在JTextField1中输入数字。请引导 这是我的密码: public class Cc extends JFrame { public Cc() { JPanel panel = new JPanel(); getContentPane().add(panel); final JTextField field = new JTe
public class Cc extends JFrame
{
public Cc()
{
JPanel panel = new JPanel();
getContentPane().add(panel);
final JTextField field = new JTextField(10);
panel.add(field);
try{
InputStream ips=new FileInputStream("test.txt");
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String line;
while ((line=br.readLine())!=null){
field.setText(line);
}
br.close();
}
catch (Exception e){
e.printStackTrace();
}
final JTextField field1 = new JTextField(10);
panel.add(field1);
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateLabel(e);
}
private void updateLabel(DocumentEvent e) {
String text = field.getText();
String text1 = field1.getText();
if (!text.isEmpty()) {
int p = Integer.parseInt(text);
int i = (p + 1);
String s = String.valueOf(i);
field1.setText(s);
} else {
field1.setText(null);
}
}
});
((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int off, String str, AttributeSet attr)
throws BadLocationException {
fb.insertString(off, str.replaceAll("\\D++", ""), attr); // remove non- digits
}
@Override
public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr)
throws BadLocationException {
fb.replace(off, len, str.replaceAll("\\D++", ""), attr); // remove non-digits
}
});
}
public static void main(String[] args)
{
Cc c = new Cc();
c.setDefaultCloseOperation(EXIT_ON_CLOSE);
c.pack();
c.setVisible(true);
}
}
1) 你为什么要宣布field1为最终版本?
2) 写入SwingUtilities.updateComponentTreeUI(面板);将文本设置为字段1后,这将刷新UI以反映新文本。请在字段1后尝试面板。重新绘制()。setText()我确信仅使用DocumentFilter成功,必须设置一个文档(用于镜像)或两个JTextFields,请@mKorbel告诉我如何解决这个问题。你能帮我解决这个问题吗@mKorbel
SwingUtilities.updateComponentTreeUI(面板)
用于设置外观
,设置自定义UI
,也不用于APIT中实现的方法。当我以编程方式更新UI组件时,它对我有效……就像在本例中的field2,然后刷新UI以反映更改。当我以编程方式更新UI组件时,它对我有效==setText(),你不需要叫其他人