как присвоить значение проверенному JChechbox?

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

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


person Darren Burgess    schedule 22.06.2011    source источник
comment
присвоить значение проверенному JCheckBox? Что ты этим имеешь ввиду? какое значение вы хотите присвоить? пожалуйста, дополните.   -  person Harry Joy    schedule 22.06.2011
comment
или отредактируйте свой пост с кодом, который показывает нам, что вы пробовали   -  person mKorbel    schedule 22.06.2011
comment
Вы пытаетесь сделать JCheckBox Checked? или вы говорите о присвоении определенного значения этому объекту (аналогично тегам в Visual Studio)?   -  person Ahmad    schedule 22.06.2011
comment
@Harry_Joy Я думаю, что @Darren_Burgess хочет передать значение конверсии в JCheckBox, чтобы позже сделать result content=entered value*jcheckbox multiplier. К сожалению, JCheckBox абсолютно не подходит для этого. JComboBox, использующий названия валют моделей для их коэффициентов конвертации, действительно лучше сделать трюк (как с точки зрения функций, так и с точки зрения пользовательского интерфейса, так как это приведет к "an amount" converted into "a currency name"="a value")   -  person Riduidel    schedule 22.06.2011
comment
@Riduidel это именно то, что я надеялся сделать. Я знаю, что мог бы сделать это с помощью виджета JComboBox, но пробовал что-то другое. По крайней мере, я знаю, что это не сработает, прежде чем продолжить, спасибо   -  person Darren Burgess    schedule 22.06.2011


Ответы (6)


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

ИЗМЕНИТЬ

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

person Balanivash    schedule 22.06.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);
person Talha Ahmed Khan    schedule 22.06.2011

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

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();

    }

}
person Abdul    schedule 22.06.2011

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

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

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

person Harry Joy    schedule 22.06.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;
       }
    }

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

с уважением

person peshkira    schedule 22.06.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)
}
person Taisin    schedule 22.06.2011