как присвоить значение проверенному JChechbox? - PullRequest
0 голосов
/ 22 июня 2011

Я делаю простой конвертер валют, который принимает начальное значение в JTextField, затем пользователь нажимает JCheckBox, соответствующий их желаемой валюте, затем преобразованное значение будет отображаться в другом JTextField.В основном, я хотел бы знать, есть ли способ присвоения значения проверенному JCheckBox, который я осмотрел и не могу найти четкого ответа на это, любая помощь будет оценена.

Например, если текущийКоэффициент конвертации стерлингов в евро равен 1.12244, это значение будет присвоено при проверке JCheckBox, поэтому исходное значение будет умножено на коэффициент конверсии.

Ответы [ 6 ]

1 голос
/ 22 июня 2011

Я также думаю, что JCheckBox не лучший вариант, чтобы делать то, что вы хотите, однако ...

Почему бы вам не расширить класс JCheckBox до CurrencyConverterCheckBox, где вы можете передавать в качестве аргументов валютыи текущая стоимость конверсии.Например:

    public class CurrencyConverterCheckBox extends JCheckBox {
       private String from;
       private String to;
       private double value;

       public CurrencyConverterCheckBox(String from, String to, double value) {
           super();
           this.from = from;
           this.to = to;
           this.value = value;
       }
    }

Тогда вы сможете выполнить преобразование, когда пользователь нажмет флажок.Вы также можете указать метки рядом с флажками (в долларах США к евро).И вы также можете предоставить метод в своем новом флажке, чтобы перевернуть валюты и рассчитать коэффициент умножения в другом направлении.

добрые пожелания

1 голос
/ 22 июня 2011

Что проще всего сделать, так это:

String[] ccys = {"USD", "EUR", "CHF", "JPY"};

public void initUI(){
 ...

 ButtonGroup grp = new ButtonGroup();

 for(String ccy : ccys){
  JCheckBox cb = new JCheckBox(ccy);
  cb.setActionCommand(ccy);
  cb.addActionListener(this);
  grp.add(cb);

  ...(add CheckBox to ui)
 }
}


private double getRate(String ccy){
  ...(retrieve the current conversion rate, f.ex from a map)
}

public void actionPerformed(ActionEvent evt){
  Double rate = getRate(evt.getActionCommand());
  ...(calculation, display)
}
1 голос
/ 22 июня 2011

// это весь рабочий код, я надеюсь, что это поможет enter image description here

public class CConvertor extends JFrame {        

    private  JLabel result;
    private  JCheckBox pk;
    private  JCheckBox ch;

    public CConvertor(){

        result = new JLabel();
        ch = new JCheckBox();
        pk = new JCheckBox();
        init();
    }

    public void init(){
        setTitle("JCheckBox Test");
        getContentPane().setLayout(new FlowLayout());
        add(result);
        add(new JLabel("        "));        
        add(new JLabel(" China "));
        add(ch);
        add(new JLabel(" Pakistan "));
        add(pk);
        setSize(400,80);
        pk.addActionListener(new ActionListener() {         

            public void actionPerformed(ActionEvent e) {
                ch.setSelected(false);
                result.setText("Pakistan selected");

            }
        });
        ch.addActionListener(new ActionListener() {         
            public void actionPerformed(ActionEvent e) {
                pk.setSelected(false);
                result.setText("China is Selected");

            }
        });

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args) {
    new CConvertor();

    }

}
1 голос
/ 22 июня 2011

Это не может быть лучшим решением, но вы можете попробовать это.

  1. Возьмите массив JCheckBox.
  2. Убедитесь, что за один раз установлен только один флажок.
  3. Взять массив значений конвертации валюты.
  4. Теперь по индексу выбранного флажка получить значение конвертации валюты из массива.

Вместо использования JCheckBox вы можете использовать JRadioButton, как предложено @Balanivash. Более простым и правильным решением будет использование JComboBox. [Я с @Riduidel в этом.]

1 голос
/ 22 июня 2011

Это даст вам значение флажка.

JCheckBox cb = ...;

// Determine status
boolean isSel = cb.isSelected();
if (isSel) {
    // The checkbox is now selected
} else {
    // The checkbox is now deselected
}

Вы можете изменить значение на слушателе действий JCheckBox

// Create an action
Action action = new AbstractAction("CheckBox Label") {
    // This method is called when the button is pressed
    public void actionPerformed(ActionEvent evt) {
        // Perform action
        JCheckBox cb = (JCheckBox)evt.getSource();

        // Determine status
        boolean isSel = cb.isSelected();
        if (isSel) {
            // The checkbox is now selected
        } else {
            // The checkbox is now deselected
        }
    }
};

// Create the checkbox
JCheckBox checkBox = new JCheckBox(action);
1 голос
/ 22 июня 2011

Думаю, будет проще, если вы назначите action-listener для вашего JCheckBox и выполните преобразование при срабатывании этого события.Для проверки JCheckBox проверено или нет, вы можете использовать метод isSelected()

РЕДАКТИРОВАТЬ

На самом деле я думаю, что вам нужно использовать JRadioButtonв ButtonGroup для этого, как будто вы используете флажок, то есть вероятность, что выбрано более одного. Здесь - пример того, как использовать ButtonGroup и запускать действие на переключателе

...