use*_*804 3 java swing jtextfield documentlistener
我正在尝试使用JFrameSwing 构建一个Java应用程序,我有5个JTextField实例.其中一个是Sum.
我需要JTextField在文本字段中输入一些数字后立即自动更改.
怎么可能?
我写的是这里.
private void displaytotalActionPerformed(java.awt.event.ActionEvent evt) {
// display total:
Float num1,num2,num3,num4,num5,num6,result;
num1 = display1b.getText().equals("") ? 0 : Float.parseFloat(display1b.getText());
num2 = display2b.getText().equals("") ? 0 : Float.parseFloat(display2b.getText());
num3 = display3b.getText().equals("") ? 0 : Float.parseFloat(display3b.getText());
num4 = display4b.getText().equals("") ? 0 : Float.parseFloat(display4b.getText());
num5 = display5b.getText().equals("") ? 0 : Float.parseFloat(display5b.getText());
num6 = display6b.getText().equals("") ? 0 : Float.parseFloat(display6b.getText());
result = num1+num2+num3+num4+num5+num6;
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
我试图获得总和并使用按钮在此文本字段中显示它并且它工作.但我希望它能自动完成.但上面的代码在textfield上没有显示任何内容.
我对此很陌生,如果你能引导,我感激不尽.
我想你在找
setText()的方法JTextField.另一种方法是使用JFormattedTextField并使用侦听器.
一些建议.
(get|set)Property.使用像Netbeans这样的IDE,它可以帮助你找到东西.而不是有6次:
display1b.getText().equals("") ? 0 : Float.parseFloat(display1b.getText());
Run Code Online (Sandbox Code Playgroud)
考虑让你的字段在一个ArrayList并编写一个迭代它们的函数,并用上面的一行来设置所有的值.
您需要使用DocumentListener附加到每个数字字段.这将在字段更改时提醒您.
从那里你需要调用某种sum方法来自动更新计数.
就像是...
public class AutoSum {
public static void main(String[] args) {
new AutoSum();
}
public AutoSum() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new AutoSumPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class AutoSumPane extends JPanel {
private JTextField[] fields;
private JTextField tally;
public AutoSumPane() {
fields = new JTextField[5];
DocumentListener docHandler = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
autoSum();
}
@Override
public void removeUpdate(DocumentEvent e) {
autoSum();
}
@Override
public void changedUpdate(DocumentEvent e) {
autoSum();
}
};
setLayout(new GridLayout(6, 1));
for (int index = 0; index < 5; index++) {
fields[index] = new JTextField(3);
fields[index].getDocument().addDocumentListener(docHandler);
fields[index].setHorizontalAlignment(JTextField.RIGHT);
add(fields[index]);
}
tally = new JTextField(3);
tally.setHorizontalAlignment(JTextField.RIGHT);
tally.setEditable(false);
add(tally);
}
protected float getValue(JTextField field) {
float value = 0;
String text = field.getText();
if (text != null && text.trim().length() > 0) {
try {
value = Float.parseFloat(text.trim());
} catch (Exception e) {
e.printStackTrace();
}
}
return value;
}
protected void autoSum() {
float sum = 0;
for (JTextField field : fields) {
sum += getValue(field);
}
tally.setText(NumberFormat.getNumberInstance().format(sum));
}
}
}
Run Code Online (Sandbox Code Playgroud)
例如.
看看如何写的DocumentListener以获取更多信息.
当你在它的时候,你可能会发现实现一个感兴趣的DocumentFilter(这是一些例子)
| 归档时间: |
|
| 查看次数: |
7746 次 |
| 最近记录: |