【发布时间】:2014-09-11 13:40:02
【问题描述】:
我有一个程序在使用 NumberFormat.getPercentInstance 格式化的 JFormattedTextField 上使用 actionPerformed 侦听器。设置如下:
percentFormat = NumberFormat.getPercentInstance();
txtRPI = new JFormattedTextField(percentFormat);
percentFormat.setMinimumFractionDigits(1);
percentFormat.setMaximumIntegerDigits(2);
GridBagConstraints gbc_txtRPI = new GridBagConstraints();
gbc_txtRPI.insets = new Insets(0, 0, 5, 5);
gbc_txtRPI.gridx = 3;
gbc_txtRPI.gridy = 2;
gbc_txtRPI.anchor = GridBagConstraints.FIRST_LINE_START;
txtRPI.setValue(objParams.getRPI());
panTop.add(txtRPI, gbc_txtRPI);
txtRPI.setColumns(10);
txtRPI.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e) {
objParams.setRPI((double)txtRPI.getValue());
}
});
这一直很好,直到我在带有表格的不同 JPanel 上添加了以下代码:
public class MyPercentRender extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private static NumberFormat formatter = NumberFormat.getPercentInstance();
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// First format the cell value as required
formatter.setMinimumFractionDigits(1);
formatter.setMaximumFractionDigits(2);
formatter.setMaximumIntegerDigits(2);
value = formatter.format((Number)value);
// And pass it on to parent class
return super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column );
}
}
添加后,第一个字段的 actionListener 停止被触发,因此我无法保存该值。
以前有没有人见过这种行为并且知道发生了什么?
感谢您的回复。我已经消除了静电。就作为事件调度线程的一部分而言,它是。
我已经尝试了更多的东西,似乎百分比实例是红鲱鱼。即使我把它拿出来,动作监听器也不会被解雇。我在创建对象后检查了对象,并且侦听器与其他对象一起注册
Class<T>.
我用过这段代码
txtRPI = new JFormattedTextField();
GridBagConstraints gbc_txtRPI = new GridBagConstraints();
gbc_txtRPI.insets = new Insets(0, 0, 5, 5);
gbc_txtRPI.gridx = 3;
gbc_txtRPI.gridy = 2;
gbc_txtRPI.anchor = GridBagConstraints.FIRST_LINE_START;
txtRPI.setValue(objParams.getRPI());
txtRPI.setColumns(10);
txtRPI.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
objParams.setRPI((double)txtRPI.getValue());
}
});
panTop.add(txtRPI, gbc_txtRPI);
this.add(panTop, BorderLayout.PAGE_START);
但还是一样的结果。我所有的其他 actionListeners(在按钮和 ComboBox 上)都可以工作。格式化文本有什么问题吗?
【问题讨论】:
-
我做了一些实验。我在第一行将 getPercentInstance 更改为 getNumberInstance,它可以工作,但没有百分号。
-
formatter.setMaximumIntegerDigits(3);100%。
标签: java swing number-formatting