gpt4 book ai didi

java - 我使用removeAllItems() 和addItem() 添加了一个动态更新程序。后来事情出了问题。发生了什么事以及如何解决?

转载 作者:行者123 更新时间:2023-12-02 10:26:47 26 4
gpt4 key购买 nike

我刚刚测试了一种通过删除然后添加项目来更改 JComboBox 列表的方法(请参阅方法 public void SetComboBoxOptions)。添加上述功能后,质量转换失败。我相信这些索引在某种程度上没有指向正确的东西。我能做什么?

我在 Windows 10 笔记本电脑上使用 JDK 11.0.1。我已经尝试过更改函数 public double WeightConvert 的实现,但它不起作用。

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

class UnitConverter extends JFrame implements ActionListener
{
JPanel grid = new JPanel(new GridLayout(2, 2));
Container contentPane = getContentPane();
String[] weightUnits = {"kg", "g", "mg", "lb", "oz", "gr"};
String[] distanceUnits = {"km", "m", "cm", "mm", "mi", "yd", "ft",
"in"};
String[] types = {"Mass", "Distance"};
DefaultComboBoxModel weight = new
DefaultComboBoxModel(weightUnits);
DefaultComboBoxModel distance = new
DefaultComboBoxModel(distanceUnits);
// selector boxes
JComboBox box1 = new JComboBox(weightUnits);
JComboBox box2 = new JComboBox(weightUnits);
JComboBox box3 = new JComboBox(types);
// text fields
JTextField field1 = new JTextField(20);
JTextField field2 = new JTextField(20);
// buttons
JButton button1 = new JButton("CONVERT");
public UnitConverter()
{
//creating window
super("Unit Converter"); // calls javax.swing.JFrame
constructor setting title
setSize(500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//adding action listeners
button1.addActionListener(this);
box3.addActionListener(this);
//putting window together
grid.add(box1);
grid.add(field1);
grid.add(box2);
grid.add(field2);
contentPane.add("Center", grid);
contentPane.add("North", box3);
contentPane.add("East", button1);
}
public void SetComboBoxOptions(String[] stuff, JComboBox box)
{
box.removeAllItems();
for (int i = 0; i < stuff.length; i++)
{
box.addItem(stuff[i]);
}
}
public double weightConvert(double in, String from, String to)
{
double result = in;
switch (from)
{
case "kg": result *= 1000;
case "g": result *= 1000;
case "mg": result *= 1; break;
case "lb": result *= 16;
case "oz": result *= 437.5;
case "gr": result *= 64.79891; break;
default: result *= 0; break;
}
switch (to)
{
case "kg": result /= 1000;
case "g": result /= 1000;
case "mg": result /= 1; break;
case "lb": result /= 16;
case "oz": result /= 437.5;
case "gr": result /= 64.79891; break;
default: result *= 0; break;
}
return result;
}
public double distanceConvert(double in, String from, String to)
{
double result = in;
switch (from)
{
case "km": result *= 1000;
case "m": result *= 100;
case "cm": result *= 10;
case "mm": result *= 1; break;
case "mi": result *= 1760;
case "yd": result *= 3;
case "ft": result *= 12;
case "in": result *= 25.4; break;
default: result *= 0; break;
}
switch (to)
{
case "km": result /= 1000;
case "m": result /= 100;
case "cm": result /= 10;
case "mm": result /= 1; break;
case "mi": result /= 1760;
case "yd": result /= 3;
case "ft": result /= 12;
case "in": result /= 25.4; break;
default: result *= 0; break;
}
return result;
}
@Override
public void actionPerformed (ActionEvent event)
{
if (event.getSource() == button1)
{
switch (box3.getSelectedIndex())
{
case 0: field2.setText(Double.toString(weightConvert(Double.parseDouble(field1.getText()), weightUnits[box1.getSelectedIndex()], weightUnits[box2.getSelectedIndex()])));
case 1: field2.setText(Double.toString(distanceConvert(Double.parseDouble(field1.getText()), distanceUnits[box1.getSelectedIndex()], distanceUnits[box2.getSelectedIndex()])));
}
}
if (event.getSource() == box3)
{
switch (box3.getSelectedIndex())
{
case 0: SetComboBoxOptions(weightUnits, box1);
SetComboBoxOptions(weightUnits, box2); break;
case 1: SetComboBoxOptions(distanceUnits, box1);
SetComboBoxOptions(distanceUnits, box2); break;
default: SetComboBoxOptions(weightUnits, box1);
SetComboBoxOptions(weightUnits, box2); break;
}
}
}
public static void main (String[] args)
{
UnitConverter XD = new UnitConverter();
}
}

我预计 20 公斤换算后约为 44 磅。但是,我发现 20 公斤换算为 2.0E7 磅。

最佳答案

要解决您遇到的小问题,请添加一个中断:

case 0: field2.setText(Double.toString(weightConvert(Double.parseDouble(field1.getText()), weightUnits[box1.getSelectedIndex()], weightUnits[box2.getSelectedIndex()])));
break; //missing

为了更好地实现,请注意重要评论:
Always a good idea to separate the GUI from the logic part of the code

Use the break; statement at the end of every case block这意味着重新考虑转换逻辑。

一个简单的转换实现可能如下所示:

class Convertor{

private static final double KG_TO_GRAM = 1000, LBS_TO_GRAM = 453.592;

private double value;
public Convertor(double value) {
this.value = value;
}

Convertor kgToGr(){
value *= KG_TO_GRAM;
return this;
}

Convertor grToKg(){
value /= KG_TO_GRAM;
return this;
}

Convertor lbToGr(){
value /= LBS_TO_GRAM;
return this;
}

Convertor grToLb(){
value /= LBS_TO_GRAM;
return this;
}

double getValue() {return value;}
}

测试

 System.out.println(new Convertor(20).kgToGr().grToLb().getValue());

打印出期望值。

关于java - 我使用removeAllItems() 和addItem() 添加了一个动态更新程序。后来事情出了问题。发生了什么事以及如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892510/

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