Я только что протестировал метод изменения списка JComboBox
, удалив, а затем добавив элементы (см. Метод public void SetComboBoxOptions
).После добавления указанного функционала преобразование массы не удалось.Я считаю, что индексы как-то не относятся к правильным вещам.Что я могу сделать?
Я использую JDK 11.0.1 на ноутбуке с Windows 10.Я уже пытался изменить реализацию функции 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 фунтов.