[英]Java Currency Converter GUI
I'm trying to make a simple java currency converter GUI. 我正在尝试制作一个简单的Java货币转换器GUI。 So far I have this :(4 parts)
到目前为止,我有这个:(4个部分)
How would I set the values for each item in the jcombbox (ex. each currency) so that I can use them to calculate the conversion? 如何设置jcombbox中每个项目的值(例如每种货币),以便可以使用它们来计算转换?
Here's the first part (1 combobox): 这是第一部分(1个组合框):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JPanel
{
private JPanel panel;
private JLabel messageLabel;
private JTextField USDTextField;
private JPanel CurrencyPanel;
private JComboBox CurrencyBox;
private String[] Currency = { "USD - United States Dollar",
"GBP - Great Britain Pound", "AUD - Australian Dollar",
"EUR- Euro"};
public currency1()
{
setLayout(new BorderLayout(4,1));
buildCurrencyPanel();
add(CurrencyPanel, BorderLayout.CENTER);
setVisible(true);
setBorder(BorderFactory.createTitledBorder("Select currency"));
}
private void buildCurrencyPanel()
{
CurrencyPanel = new JPanel();
CurrencyBox = new JComboBox(Currency);
CurrencyPanel.add(CurrencyBox);
}
public static void main(String[] args)
{
new currency1();
}
}
Maybe try using Map (eg HashMap) instead of an array? 也许尝试使用Map(例如HashMap)而不是数组? The key would be a currency name and the value would be currency's value.
密钥将是货币名称,值将是货币的值。 So instead of:
所以代替:
private String[] Currency = { "USD - United States Dollar",
"GBP - Great Britain Pound", "AUD - Australian Dollar",
"EUR- Euro"};
I would make it: 我会做到的:
private Map<String, Double> Currency = new HashMap<>();
//This is an initialization block
{
Currency.put("USD - United States Dollar", 4.44);
Currency.put("GBP - Great Britain Pound", 5.55);
//and so on...
}
only comment, my view about Currency Converter 只有评论,我对Currency Converter的看法
definition for Currency Pairs, by default is there Base and Variable Currency 货币对的定义,默认情况下存在基础货币和可变货币
definitions for Exange Rate 岩心率的定义
definition for Buy/Sale 买卖定义
definition for Base/Variable 基本/变量的定义
(put all am points together) then there are four possible combinations (将所有上午的积分放在一起),然后有四种可能的组合
buy Base (EUR 1,000.- at 1.31) 购买基数(EUR 1,000.- at 1.31)
sell Base (EUR 1,000.- at 1.31) 卖出基础(1,000欧元-1.31)
buy Variable (USD 1,000.- at 1.311) 购买Variable(USD 1,000.- at 1.311)
sell Variable (USD 1,000.- at 1.311) 卖出变量(1,000美元-在1.311时)
GBP/USD has reverse calculations methods 英镑/美元有反向计算方法
Suggestions of a possible solution: 可能解决方案的建议:
getSelectedItem()
and would use them to calculate an answer. getSelectedItem()
从两个组合框中提取所选货币,并将使用它们来计算答案。 Create a Currency
class that contains a double value which is the currency's value (you choose how to calculate these). 创建一个包含双精度值的
Currency
类,该双精度值是货币的值(您选择如何计算它们)。
Have the currency's toString()
return what should be displayed in the combo box, such as "USD - United States Dollar". 让货币的
toString()
返回组合框中应显示的内容,例如“ USD-United States Dollar”。
Now make sure your JComboBox
uses generics, so when you call getSelectedItem()
you don't have to cast it to Currency
, as in new JComboBox<Currency>()
. 现在确保您的
JComboBox
使用泛型,因此当您调用getSelectedItem()
,不必像new JComboBox<Currency>()
一样将其转换为Currency
。 If you've got your project set on Java 6 you can still use JComboBox generics, even though that was added in Java 7 because of some fancy thing called type erasure. 如果您已经在Java 6上设置了项目,那么即使Java 7中添加了通用类型的JComboBox泛型,也是因为某些所谓的类型擦除的原因。 Look it up for details.
查找详细信息。
I didn't see much in clicking on the URL you provided, so I'm hot sure if this would be an exact fit, but things like this are usually best addressed with Java enum
s. 我单击您提供的URL并没有看到太多,所以我很确定这是否完全合适,但是通常使用Java
enum
可以最好地解决此类问题。 In particular you could use something like the following to store your conversion strings and rates (note that I picked arbitrary conversion rates - substitute the real rates for these): 特别是,您可以使用类似以下内容的方式来存储转化字符串和转化率(请注意,我选择了任意转化率-用实际转化率代替这些转化率):
public enum Currency {
USD(1.0,"United States Dollar"),
GPB(0.9,"Great Britain Pound"),
AUD(0.8,"Australian Dollar"),
EUR(0.7,"Euro");
private double conversionRatio;
private String description;
private Currency(double conversionRatio, String description) {
this.conversionRatio = conversionRatio;
this.description = description;
}
public double getConversionRatio() {
return conversionRatio;
}
public String getDescription() {
return description;
}
public void toString() {
return new StringBuilder(name()).append(" - ").append(getDescription()).toString();
}
}
Then you could add these to your combobox like this: 然后可以将它们添加到您的组合框中,如下所示:
for( Currency currency : Currency.values() ) {
CurrencyBox.addItem(currency);
}
package convert;
public class CConverter extends javax.swing.JFrame {
// Currency Values {Rupee,Dollar,Pound,Yen,Euro}
double curr1[] = {0,1,0.015,0.012,1.67,0.014};
double curr2[] = {0,1,0.015,0.012,1.67,0.014};
/**
* Creates new form CConverter
*/
public CConverter() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jcmbCurrency1 = new javax.swing.JComboBox<>();
jcmbCurrency2 = new javax.swing.JComboBox<>();
jtxtAmount = new javax.swing.JTextField();
jlblConversion = new javax.swing.JLabel();
jbtnConvert = new javax.swing.JButton();
jbtnReset = new javax.swing.JButton();
jtxtConversion = new javax.swing.JTextField();
jbtnExit = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setText("Currency Converter");
jcmbCurrency1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Choose One", "INDIA Rupee", "US Dollar", "UK Pound", "JAPAN Yen", "Euro" }));
jcmbCurrency2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Choose Other", "INDIA Rupee", "US Dollar", "UK Pound", "JAPAN Yen", "Euro" }));
jtxtAmount.setText("Amount");
jlblConversion.setText("Conversion");
jbtnConvert.setText("CONVERT");
jbtnConvert.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtnConvertActionPerformed(evt);
}
});
jbtnReset.setText("RESET");
jbtnReset.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtnResetActionPerformed(evt);
}
});
jtxtConversion.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
jtxtConversion.setForeground(new java.awt.Color(0, 0, 204));
jtxtConversion.setText("Converted Value");
jbtnExit.setText("Exit");
jbtnExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtnExitActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel1)
.addGroup(layout.createSequentialGroup()
.addComponent(jbtnConvert)
.addGap(18, 18, 18)
.addComponent(jbtnReset, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jcmbCurrency1, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jcmbCurrency2, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jtxtAmount)
.addComponent(jlblConversion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jtxtConversion))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(158, 158, 158)
.addComponent(jbtnExit)
.addContainerGap(191, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(jLabel1)
.addGap(28, 28, 28)
.addComponent(jcmbCurrency1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jcmbCurrency2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jtxtAmount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(38, 38, 38)
.addComponent(jlblConversion)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jtxtConversion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jbtnConvert)
.addComponent(jbtnReset))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jbtnExit)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jbtnConvertActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
double amt = Double.parseDouble(jtxtAmount.getText());
int obj1 = jcmbCurrency1.getSelectedIndex();
int obj2 = jcmbCurrency2.getSelectedIndex();
if (obj1 == obj2){
String samecur = "Both the currencies cannot be the same";
jtxtConversion.setText(samecur);
}
else {
double res = (amt/curr1[obj1])*curr2[obj2];
String conv = String.format("%.2f",res);
jtxtConversion.setText(conv);
}
}
private void jbtnResetActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jtxtAmount.setText(null);
jtxtConversion.setText(null);
jcmbCurrency1.setSelectedIndex(0);
jcmbCurrency2.setSelectedIndex(0);
}
private void jbtnExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(CConverter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(CConverter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(CConverter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(CConverter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CConverter().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JButton jbtnConvert;
private javax.swing.JButton jbtnExit;
private javax.swing.JButton jbtnReset;
private javax.swing.JComboBox<String> jcmbCurrency1;
private javax.swing.JComboBox<String> jcmbCurrency2;
private javax.swing.JLabel jlblConversion;
private javax.swing.JTextField jtxtAmount;
private javax.swing.JTextField jtxtConversion;
// End of variables declaration
}
Try this code i have taken indian rupee as the base it can convert indian rupee us dollar british pound japanese yen euro 试试这个代码我已经以印度卢比为基础,它可以转换印度卢比美元美元英镑日元日元欧元
Basically, the way I understand " Exchange rate " is, how much it costs to exchange one currency for another. 基本上,我理解“ 汇率 ”的方式是,将一种货币兑换为另一种货币要花费多少钱。
To me, that means that there is a need to associate one currency with another. 对我来说,这意味着需要将一种货币与另一种货币联系起来。 This can be a " Currency Pair "
这可以是“ 货币对 ”
In addition to some of the previous suggestions (eg. Using an enum), as a brute force, a currency pair associated to an exchange rate can be used for the conversion. 除了某些先前的建议(例如,使用枚举)之外,还可以将与汇率相关的货币对用作蛮力进行转换。
For example (Note that the code below will need proper validation and scale/rounding): 例如(请注意,下面的代码将需要适当的验证和缩放/四舍五入):
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
public class Main extends JPanel {
enum Currency {
USD("United States Dollar"),
GBR("Great Britain Pound"),
AUD("Australian Dollar"),
EUR("Euro");
private String description;
Currency(String description) {
this.description = description;
}
@Override public String toString() {
return this.name() + " - " + this.description;
}
}
class CurrencyPair {
private final Currency from;
private final Currency to;
public CurrencyPair(Currency from, Currency to) {
this.from = from;
this.to = to;
}
@Override public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CurrencyPair that = (CurrencyPair) o;
if (from != that.from) return false;
return to == that.to;
}
@Override public int hashCode() {
int result = from.hashCode();
result = 31 * result + to.hashCode();
return result;
}
}
private final Map<CurrencyPair, BigDecimal> exchangeRates = new HashMap<CurrencyPair, BigDecimal>() {{
put(new CurrencyPair(Main.Currency.USD, Main.Currency.USD), BigDecimal.valueOf(1));
put(new CurrencyPair(Main.Currency.AUD, Main.Currency.AUD), BigDecimal.valueOf(1));
put(new CurrencyPair(Main.Currency.EUR, Main.Currency.EUR), BigDecimal.valueOf(1));
put(new CurrencyPair(Main.Currency.GBR, Main.Currency.GBR), BigDecimal.valueOf(1));
put(new CurrencyPair(Main.Currency.USD, Main.Currency.GBR), BigDecimal.valueOf(0.75));
put(new CurrencyPair(Main.Currency.USD, Main.Currency.AUD), BigDecimal.valueOf(1.33));
put(new CurrencyPair(Main.Currency.USD, Main.Currency.EUR), BigDecimal.valueOf(0.89));
put(new CurrencyPair(Main.Currency.EUR, Main.Currency.USD), BigDecimal.valueOf(1.12));
put(new CurrencyPair(Main.Currency.EUR, Main.Currency.AUD), BigDecimal.valueOf(1.49));
put(new CurrencyPair(Main.Currency.EUR, Main.Currency.GBR), BigDecimal.valueOf(0.85));
put(new CurrencyPair(Main.Currency.AUD, Main.Currency.USD), BigDecimal.valueOf(0.74));
put(new CurrencyPair(Main.Currency.AUD, Main.Currency.EUR), BigDecimal.valueOf(0.67));
put(new CurrencyPair(Main.Currency.AUD, Main.Currency.GBR), BigDecimal.valueOf(0.57));
put(new CurrencyPair(Main.Currency.GBR, Main.Currency.USD), BigDecimal.valueOf(1.33));
put(new CurrencyPair(Main.Currency.GBR, Main.Currency.EUR), BigDecimal.valueOf(1.18));
put(new CurrencyPair(Main.Currency.GBR, Main.Currency.AUD), BigDecimal.valueOf(1.76));
}};
public Main() {
super(new FlowLayout(FlowLayout.LEADING));
// Amount
JTextField amountInput = new JTextField(20);
JPanel amount = new JPanel();
amount.add(amountInput);
amount.setBorder(BorderFactory.createTitledBorder("Enter Ammount"));
add(amount, BorderLayout.CENTER);
// From
JPanel from = new JPanel();
JComboBox fromOptions = new JComboBox(Currency.values());
from.add(fromOptions);
from.setBorder(BorderFactory.createTitledBorder("Select currency"));
add(from, BorderLayout.CENTER);
// To
JComboBox toOptions = new JComboBox(Currency.values());
JPanel to = new JPanel();
to.add(toOptions);
to.setBorder(BorderFactory.createTitledBorder("Convert to"));
add(to, BorderLayout.CENTER);
// Convert Action
JLabel convertText = new JLabel();
JButton convertCmd = new JButton("Convert");
convertCmd.addActionListener(convertAction(amountInput, fromOptions, toOptions, convertText));
JPanel convert = new JPanel();
convert.add(convertCmd);
convert.add(convertText);
add(convert);
}
private ActionListener convertAction(
final JTextField amountInput,
final JComboBox fromOptions,
final JComboBox toOptions,
final JLabel convertText) {
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO: Needs proper validation
String amountInputText = amountInput.getText();
if ("".equals(amountInputText)) { return; }
// Convert
BigDecimal conversion = convertCurrency(amountInputText);
convertText.setText(NumberFormat
.getCurrencyInstance(Locale.US)
.format(conversion));
}
private BigDecimal convertCurrency(String amountInputText) {
// TODO: Needs proper rounding and precision setting
CurrencyPair currencyPair = new CurrencyPair(
(Currency) fromOptions.getSelectedItem(),
(Currency) toOptions.getSelectedItem());
BigDecimal rate = exchangeRates.get(currencyPair);
BigDecimal amount = new BigDecimal(amountInputText);
return amount.multiply(rate);
}
};
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new Main());
frame.setTitle("Currency Thing");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.