swing Java SE7 getpercentinstance
我有一个程序,它在使用NumberFormat格式化的JFormattedTextField上使用actionPerformed侦听器。getPercentInstance。其设置如下:
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就停止被激发,因此我无法保存该值
以前有没有人见过这种行为,知道发生了什么
谢谢你的回复。我已取出静电计。作为事件分派线程的一部分,它是
我尝试了更多的东西,但这个例子似乎是在转移注意力。即使我把它拿出来,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);
但结果还是一样。我所有的其他ActionListener(在按钮和组合框上)都可以工作。格式化文本有什么问题吗
# 1 楼答案
查看片段时会出现两个相关问题:
NumberFormat
的static
实例将由您的TableCellRenderer
的所有实例共享Swing是not thread safe,也不是example的格式化程序^{} 和^{} 。验证是否仅在event dispatch thread上构建和操作了Swing GUI对象
# 2 楼答案
问题是percentInstance强制的格式设置。如果只输入一个没有%的数值,则验证将失败,因此会执行还原,并且不会触发actionevent。如果将%符号放在其中,则会触发事件