Java 使用JFormattedText的getValue显示在另一个JFormattedText字段中

Java 使用JFormattedText的getValue显示在另一个JFormattedText字段中,java,swing,jformattedtextfield,Java,Swing,Jformattedtextfield,我有一个程序,根据选择的单选按钮计算两个变量中的任何一个。我试图使用getValue从JFormattedText字段中获取一个值,并将其显示在另一个JFormattedText字段中(最终我将使用该数字进行一些计算) 我的问题出现在下面的代码片段中: public void actionPerformed(ActionEvent e) { if (selection.getSelection().equals(monthlyRadioButton.getModel())) {

我有一个程序,根据选择的单选按钮计算两个变量中的任何一个。我试图使用
getValue
JFormattedText
字段中获取一个值,并将其显示在另一个
JFormattedText
字段中(最终我将使用该数字进行一些计算)

我的问题出现在下面的代码片段中:

public void actionPerformed(ActionEvent e) {
    if (selection.getSelection().equals(monthlyRadioButton.getModel())) {
         result  = ((Double) interestRateField.getValue()).floatValue();
         monthlyPaymentField.setValue(new Double(result));
        System.out.println("You selected monthly");
    } else {
        loanAmountField.setValue(new Double(12.22));
        System.out.println("You selected loan");
    }
}
在这里,我试图将
getValue
分配给结果。我看过Oracle文档,似乎获取值的代码只是
interestRateField.getValue()当我尝试此操作时,我得到一个错误,说
无法将对象转换为double
,因此我添加了
floatValue()
,并将其强制转换以删除错误

当我按calculate时,它不会在
月付款字段中显示
利息字段
的输入

如何使用
getValue
获取我的值(从
JFormattedTextField
使用
DecimalFormat
),然后将其显示在不同的
JFormattedTextField
中?
查看并用于此作业,例如

编辑

1.您的代码与目标太接近

2.使用(始终触发两个事件
已选择
/
已取消选择


3.您不能为两个或多个
JComponents

稍微调整装满鳗鱼的气垫船的答案,以使用
JFormattedTextField
getValue
setValue
方法,并跳过手动解析/格式化

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.text.DecimalFormat;

public class FutureValueFrame extends JFrame {
  public static void main( String[] args ) {
    DecimalFormat format = new DecimalFormat( "####.##" );
    //in case you always want to see the 2 fraction digits
    //format.setMinimumFractionDigits( 2 );
    final JFormattedTextField field1 = new JFormattedTextField(
        format );
    final JFormattedTextField field2 = new JFormattedTextField(
        format );
    field1.setColumns( 15 );
    field2.setColumns( 15 );
    JButton btn = new JButton( new AbstractAction( "Multiply by 2" ) {

      @Override
      public void actionPerformed( ActionEvent e ) {
        Number value = ( Number ) field1.getValue();
        if ( value != null ){
          field2.setValue( 2 * value.doubleValue() );
        }
      }
    } );

    JPanel panel = new JPanel();
    panel.add( field1 );
    panel.add( btn );
    panel.add( field2 );
    JOptionPane.showMessageDialog( null, panel );
  }
}
这至少使用了设计时的
JFormattedTextField
,但仍然具有
JFormattedTextField
的所有可用性“怪癖”


有一篇关于解决大部分问题的博客文章,可能值得一看(尽管我仍然认为该版本可以改进,例如,输入无效数据后立即将背景染成红色,给用户一个视觉线索。)

强烈建议不要在EDT以外的其他线程上进行Swing操作。这会导致很多问题。只是说,……我已经删除了我的答案。感谢您寻找并教给我们更好的解决方案!1+
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.text.DecimalFormat;

public class FutureValueFrame extends JFrame {
  public static void main( String[] args ) {
    DecimalFormat format = new DecimalFormat( "####.##" );
    //in case you always want to see the 2 fraction digits
    //format.setMinimumFractionDigits( 2 );
    final JFormattedTextField field1 = new JFormattedTextField(
        format );
    final JFormattedTextField field2 = new JFormattedTextField(
        format );
    field1.setColumns( 15 );
    field2.setColumns( 15 );
    JButton btn = new JButton( new AbstractAction( "Multiply by 2" ) {

      @Override
      public void actionPerformed( ActionEvent e ) {
        Number value = ( Number ) field1.getValue();
        if ( value != null ){
          field2.setValue( 2 * value.doubleValue() );
        }
      }
    } );

    JPanel panel = new JPanel();
    panel.add( field1 );
    panel.add( btn );
    panel.add( field2 );
    JOptionPane.showMessageDialog( null, panel );
  }
}