gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:40 24 4
gpt4 key购买 nike

我有一个程序,可以根据所选的单选按钮计算 2 个变量中的任意一个。我正在尝试使用 getValueJFormattedText 中获取值字段并将其显示在另一个JFormattedText字段(最终我会用数字做一些计算)。

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.text.DecimalFormat;

public class FutureValueFrame extends JFrame
{
public FutureValueFrame()
{
setTitle("Sample App");
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


public static void main(String[] args)
{
JFrame f = new FutureValueFrame();

//GUI and BUTTONS
JRadioButton monthlyRadioButton = new JRadioButton("Monthly Payment");
JRadioButton loanAmountButton = new JRadioButton("Loan Amount");
ButtonGroup selection = new ButtonGroup();
selection.add(monthlyRadioButton);
selection.add(loanAmountButton);

JFormattedTextField loanAmountField = new JFormattedTextField(new DecimalFormat("####.##"));
JFormattedTextField interestRateField = new JFormattedTextField(new DecimalFormat("####.##"));
JFormattedTextField yearField = new JFormattedTextField(new DecimalFormat("####.##"));
JFormattedTextField monthlyPaymentField = new JFormattedTextField(new DecimalFormat("####.##"));


JPanel menuPanel = new JPanel();
menuPanel.setLayout(new GridLayout(1,2));

//ACTION LISTENER FOR RADIO BUTTONS
monthlyRadioButton.addActionListener(new SelectionListener(monthlyRadioButton, loanAmountButton, loanAmountField, monthlyPaymentField));
loanAmountButton.addActionListener(new SelectionListener(monthlyRadioButton, loanAmountButton, loanAmountField, monthlyPaymentField));

JPanel topPanel = new JPanel();
topPanel.setLayout(new GridLayout(1,2));
topPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
topPanel.add(monthlyRadioButton);
topPanel.add(loanAmountButton);

JPanel botPanel = new JPanel();
botPanel.setLayout(new GridLayout(4,2));

botPanel.add(new JLabel("Loan Amount:"));
botPanel.add(loanAmountField);

botPanel.add(new JLabel("Yearly Interest Rate:"));
botPanel.add(interestRateField);

botPanel.add(new JLabel("Number of Years:"));
botPanel.add(yearField);

botPanel.add(new JLabel("Monthly Payment:"));
botPanel.add(monthlyPaymentField);

JPanel container = new JPanel();
container.setLayout(new GridLayout(3,1));
container.add(topPanel);
container.add(botPanel);
container.add(menuPanel);

f.add(container);

JButton calculateButton = new JButton("Calculate");

calculateButton.addActionListener(new CalculateMonthlyListener(loanAmountField, interestRateField, yearField, monthlyPaymentField, selection, monthlyRadioButton, loanAmountButton));


JButton exitButton = new JButton("Exit");
exitButton.addActionListener(new ExitListener());

menuPanel.add(calculateButton);
menuPanel.add(exitButton);

f.setVisible(true);
f.setLocationRelativeTo(null);
}

class CalculateMonthlyListener implements ActionListener
{
private JFormattedTextField loanAmountField;
private JFormattedTextField monthlyPaymentField;
private JFormattedTextField interestRateField;
private JFormattedTextField yearField;
private double result;
private ButtonGroup selection;
private JRadioButton monthlyRadioButton;
private JRadioButton loanAmountButton;

public CalculateMonthlyListener (JFormattedTextField loanAmountField,
JFormattedTextField interestRateField,
JFormattedTextField yearField,
JFormattedTextField monthlyPaymentField,
ButtonGroup selection,
JRadioButton monthlyRadioButton,
JRadioButton loanAmountButton)
{
this.interestRateField = interestRateField;
this.yearField = yearField;
this.loanAmountField = loanAmountField;
this.selection = selection;
this.monthlyRadioButton = monthlyRadioButton;
this.loanAmountButton = loanAmountButton;
this.monthlyPaymentField = monthlyPaymentField;
}

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");
}
}
}

class ExitListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
//f.dispose();
System.exit(0);
//System.out.println("You clicked exit");
}
}

class SelectionListener implements ActionListener
{
private JRadioButton monthlyRadioButton;
private JRadioButton loanAmountButton;
private JFormattedTextField loanAmountField;
private JFormattedTextField monthlyPaymentField;

public SelectionListener (JRadioButton monthlyRadioButton,
JRadioButton loanAmountButton,
JFormattedTextField loanAmountField,
JFormattedTextField monthlyPaymentField)
{
this.monthlyRadioButton = monthlyRadioButton;
this.loanAmountButton = loanAmountButton;
this.loanAmountField = loanAmountField;
this.monthlyPaymentField = monthlyPaymentField;
}

public void actionPerformed(ActionEvent event)
{
if(event.getSource() == monthlyRadioButton)
{
loanAmountField.setEditable(false);
monthlyPaymentField.setEditable(true);
}
else
{
monthlyPaymentField.setEditable(false);
loanAmountField.setEditable(true);
}
}
}
}

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

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();但是,当我尝试这样做时,我收到一条错误消息 Can't convert object to double所以我添加了 floatValue()并将其强制转换以消除错误。

当我按下计算时,它不显示来自 interestRateField 的输入在 monthlyPaymentField .

如何使用 JFormattedTextField 获取我的值(从 DecimalFormat 使用 getValue )然后以不同的方式显示它 JFormattedTextField

最佳答案

稍微调整了 Hovercraft Full Of Eels 的答案以使用 JFormattedTextFieldgetValuesetValue 方法并跳过手动解析/格式化

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 的所有可用性“怪癖”。

the tips4java site 上有一篇博文关于improving the JFormattedTextField它解决了大部分问题,可能值得多看一眼(尽管我仍然认为该版本可以改进,例如,通过在输入无效数据后立即将背景着色为红色,以便为用户提供视觉线索。)

关于java - 使用 JFormattedText 的 getValue 显示在另一个 JFormattedText 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com