有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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(在按钮和组合框上)都可以工作。格式化文本有什么问题吗


共 (2) 个答案

  1. # 1 楼答案

    查看片段时会出现两个相关问题:

  2. # 2 楼答案

    问题是percentInstance强制的格式设置。如果只输入一个没有%的数值,则验证将失败,因此会执行还原,并且不会触发actionevent。如果将%符号放在其中,则会触发事件