Я не могу выбрать запись в моем ComboBox

1

Итак, я делаю программу конвертера для удовольствия и столкнулся с проблемой изменения записей в JComboBoxes. Я, наконец, получил его, чтобы изменить содержимое, но не смог выбрать мой блок, чтобы на самом деле сделать мое преобразование.

private JComboBox comboBox;
private static JComboBox comboBox2;
private static JComboBox numberBox;
private static JComboBox typebox;

public Converter() {
    setTitle("ComboBoxTest");
    setSize(500,200);
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    String types[]={"Choose one", "Distance", "Weight"};
    typebox=new JComboBox(types);
    String choice=(String)typebox.getSelectedItem();
    String  measurementsw[]={"Choose one", "Pounds", "Kilograms", "Grams"};
    String measurementsd[]={"Choose one", "Meters", "Feet", "Inches", "Miles", "Yards"};
    String starts[]={"Choose one"};
    numberBox= new JComboBox();
    numberBox.setEditable(true);
    numberBox.addActionListener(this);
    typebox.addActionListener(this);
    JPanel t= new JPanel();
    t.add(typebox);
    t.add(numberBox);
    getContentPane().add(t, "North");
    DefaultComboBoxModel model = new DefaultComboBoxModel( measurementsd );
    DefaultComboBoxModel model2 = new DefaultComboBoxModel( measurementsd );
    comboBox = new JComboBox(model);
    comboBox2= new JComboBox(model2);
    comboBox.addActionListener(this);
    comboBox2.addActionListener(this);
    JPanel p = new JPanel();
    p.add(comboBox);
    JPanel q= new JPanel();
    q.add(comboBox2);
    getContentPane().add(p, "West");
    getContentPane().add(q, "East");
    getContentPane().add(result, "Center");
    ;
}
public void actionPerformed(ActionEvent evt) {
    //gets the word in each dropdown
    String type= (String) typebox.getSelectedItem();

    if (type.toLowerCase().equals("distance"))
    {
        //Changes contents of the dropdowns to distance measurements
        String measurementsd[]={"Choose one", "Meters", "Feet", "Inches", "Miles", "Yards"};
        DefaultComboBoxModel model = new DefaultComboBoxModel( measurementsd );
        DefaultComboBoxModel model2 = new DefaultComboBoxModel( measurementsd );
        comboBox.setModel(model);
        comboBox2.setModel(model2);
        String item = (String) comboBox.getSelectedItem();
        String item2 = (String) comboBox2.getSelectedItem();
        String item3 = (String) numberBox.getSelectedItem();
        //does the actual conversions
        if (item.toLowerCase().equals("choose one")||item2.toLowerCase().equals("choose one"))
        {  result.setText("Choose your Measurements");
        }
        if (item.toLowerCase().equals("meters"))
        {  result.setText(DConvert.ConverMeter(item3, item2));
        }
        if (item.toLowerCase().equals("yards"))
        {  result.setText(DConvert.ConverYard(item3, item2));
        }
        if (item.toLowerCase().equals("miles"))
        {  
            result.setText(DConvert.ConverMile(item3, item2));
        }
        if (item.toLowerCase().equals("inches"))
        {  result.setText(DConvert.ConverInch(item3, item2));
        }
        if (item.toLowerCase().equals("feet"))
        {  
            result.setText(DConvert.ConverFeet(item3, item2));
        }
    }   
    if (type.toLowerCase().equals("weight"))
    {
        //Changing contents of the dropdowns to the weight measurements
        changeToWeight();
        result.setText("Sorry, no can do!");
    }

}
public void changeToWeight(){
    String  measurementsw[]={"Choose one", "Pounds", "Kilograms", "Grams"};
    DefaultComboBoxModel model = new DefaultComboBoxModel( measurementsw );
    DefaultComboBoxModel model2 = new DefaultComboBoxModel( measurementsw );
    comboBox.setModel( model );
    comboBox2.setModel(model2);
}

public static void main(String[] args) {
    JFrame frame = new Converter();
    frame.show();
}

} при запуске, это изменит содержимое, но я не могу сделать необходимый выбор. Игнорировать DConvert, то есть какой-то отдельный класс, который я сделал

Теги:

1 ответ

0
Лучший ответ

Мне потребовалось 30 минут, чтобы ваш код мог компилироваться без каких-либо предупреждений.

  1. Первый JComboBox заполняет два других JComboBoxes. Итак, нам нужен прослушиватель элементов для прослушивания JComboBox и заполнения двух других JComboBoxes.

  2. Я использовал JTextField для ввода номера, а также номер выхода.

  3. Я использовал JButton для запуска вычисления.

  4. Я перестроил компоненты Swing в порядке, который, как я думал, имел больше смысла.

  5. Я разбил ваш монолитный код на несколько методов. Таким образом, я мог бы тестировать каждый метод отдельно.

  6. Я начал создавать список коэффициентов пересчета. Вам нужно будет закончить создание списка. Используя List, слушатель действий JButton имеет всего 6 строк для всех преобразований.

  7. Наконец, я обратился к методу SwokeUtilities invokeLater в основном методе, чтобы убедиться, что компоненты Swing создаются и используются в потоке Dispatch.

Итак, вот GUI.

Изображение 174551

И вот код.

package com.ggl.testing;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Converter extends JFrame {

    private static final long serialVersionUID = 7049836604855145085L;

    private DefaultComboBoxModel<String> inputModel;
    private DefaultComboBoxModel<String> outputModel;

    private JButton submitButton;

    private JComboBox<String> inputComboBox;
    private JComboBox<String> outputComboBox;
    private JComboBox<String> typeComboBox;

    private JTextField inputDimensionField;
    private JTextField outputDimensionField;

    private List<ConversionFactor> conversionFactors;

    public Converter() {
        this.conversionFactors = createConversionFactors();

        setTitle("ComboBoxTest");
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        add(createConversionPanel(), BorderLayout.CENTER);
        add(createButtonPanel(), BorderLayout.SOUTH);
        pack();
    }

    private JPanel createConversionPanel() {
        JPanel panel = new JPanel();

        String types[] = { "Choose one", "Distance", "Weight" };
        typeComboBox = new JComboBox<String>(types);
        typeComboBox.setSelectedIndex(0);
        typeComboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent event) {
                if (event.getStateChange() == ItemEvent.SELECTED) {
                    if (event.getItem().equals("Distance")) {
                        changeToDistance();
                    } else if (event.getItem().equals("Weight")) {
                        changeToWeight();
                    }
                }
            }
        });
        panel.add(typeComboBox);

        inputDimensionField = new JTextField(10);
        panel.add(inputDimensionField);

        String measurements[] = { "Choose one" };
        inputComboBox = new JComboBox<String>(measurements);
        panel.add(inputComboBox);

        JLabel label = new JLabel("converts to");
        panel.add(label);

        outputDimensionField = new JTextField(10);
        panel.add(outputDimensionField);

        outputComboBox = new JComboBox<String>(measurements);
        panel.add(outputComboBox);

        return panel;
    }

    private void changeToDistance() {
        String measurementsd[] = { "Choose one", "Meters", "Feet", "Inches",
                "Miles", "Yards" };
        inputModel = new DefaultComboBoxModel<String>(measurementsd);
        outputModel = new DefaultComboBoxModel<String>(measurementsd);
        inputComboBox.setModel(inputModel);
        outputComboBox.setModel(outputModel);
    }

    private void changeToWeight() {
        String measurementsw[] = { "Choose one", "Pounds", "Kilograms", "Grams" };
        inputModel = new DefaultComboBoxModel<String>(measurementsw);
        outputModel = new DefaultComboBoxModel<String>(measurementsw);
        inputComboBox.setModel(inputModel);
        outputComboBox.setModel(outputModel);
    }

    private JPanel createButtonPanel() {
        JPanel panel = new JPanel();

        submitButton = new JButton("Convert");
        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                double input = Double.parseDouble(inputDimensionField.getText());
                String inputValue = (String) inputComboBox.getSelectedItem();
                String outputValue = (String) outputComboBox.getSelectedItem();
                double output = input
                        * getConversionFactor(inputValue, outputValue);
                String s = String.format("%.2f", output);
                outputDimensionField.setText(s);
            }
        });
        panel.add(submitButton);

        return panel;
    }

    private double getConversionFactor(String inputValue, String outputValue) {
        for (ConversionFactor factor : conversionFactors) {
            if (inputValue.equalsIgnoreCase(factor.getInputUnit())
                    && outputValue.equalsIgnoreCase(factor.getOutputUnit())) {
                return factor.getConversionFactor();
            }
        }
        return 1.0D;
    }

    private List<ConversionFactor> createConversionFactors() {
        List<ConversionFactor> conversionFactors = new ArrayList<ConversionFactor>();
        ConversionFactor factor = new ConversionFactor("meters", "feet",
                3.2808D);
        conversionFactors.add(factor);
        factor = new ConversionFactor("meters", "inches", 39.370D);
        conversionFactors.add(factor);

        // I'll leave the rest for you to fill out.

        return conversionFactors;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new Converter();
                frame.setVisible(true);
            }
        });
    }

    public class ConversionFactor {

        private final String inputUnit;
        private final String outputUnit;

        private final double conversionFactor;

        public ConversionFactor(String inputUnit, String outputUnit,
                double conversionFactor) {
            this.inputUnit = inputUnit;
            this.outputUnit = outputUnit;
            this.conversionFactor = conversionFactor;
        }

        public String getInputUnit() {
            return inputUnit;
        }

        public String getOutputUnit() {
            return outputUnit;
        }

        public double getConversionFactor() {
            return conversionFactor;
        }

    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню