Потерянная Фокуса jTextField

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

Пример: Я написал в поле сантиметры стоимость, и он должен появляться у меня в поле дюймы, и то же самое, если я перехожу наоборот.

Проблема состоит в том, что я не могу заставлять это спрашивать в action performed Jbutton условие if(CampoPulgadas.isFocusOwner).

Он был бы благодарен за помощь.

private void ConvertirBotonActionPerformed(java.awt.event.ActionEvent evt) {                                               

    double convertido = 0;

    if(!CampoCentimetros.isFocusOwner())
    {
        String cen = CampoCentimetros.getText();

        try{
            convertido = Double.parseDouble(cen);
        }
        catch(NumberFormatException ex){
            JOptionPane.showMessageDialog(this, "El valor "+convertido+" no es válido!", "ERROR", JOptionPane.ERROR_MESSAGE);
            return;
        }

        convertido /= 2.54;

        cen = String.format("%.4f",convertido);

        CampoPulgadas.setText(cen);

        return;
    }
    if(CampoPulgadas.isFocusOwner())
    {
    } else {
        String pulg = CampoPulgadas.getText();

        try{
            convertido = Double.parseDouble(pulg);
        }
        catch(NumberFormatException e){

            JOptionPane.showMessageDialog(this, "El valor "+convertido+" no es válido!", "ERROR", JOptionPane.ERROR_MESSAGE);
            return;
        }

        convertido *= 2.54;

        pulg = String.format("%.4f", convertido);

        CampoCentimetros.setText(pulg);

        return;
    }
}                                   
3
задан 18.04.2016, 01:07
2 ответа

Если у компонента есть фокус, тогда призвав метод isFocusOwner на этой инстанции (компонент), он возвратит true. Когда ты кликаешь на кнопке "Convertir", это владелец фокуса, если только он не будет focusable. 1

Отсюда следует, что возможное решение состоит в том, чтобы делать, что ConvertirBoton будьте не focusable. А именно:

ConvertirBoton.setFocusable(false);

Так, едва написав или сделав что-то в каком-либо из полей из текста и кликнув с мышью, поле текста не потеряет фокус. 2

──────────────
1. Будьте видны больше деталей этого в How to Use the Фокус Субсистем.
2. Единственный недостаток с этим решением состоит в том, что не будет возможно использовать клавиатуру, чтобы нажимать кнопку, только с мышью.

3
ответ дан 24.11.2019, 14:34
  • 1
    Большое спасибо. Он прошел меня роскошно! – Matias R. 18.04.2016, 02:44

Ты можешь aГ±adir один FocusListener в поля так что, когда они потеряют фокус, они конвертируют количество.

Даже ты recomendarГ, - чтобы использовать один KeyListener asГ - количество irГ - в конвертируя по мере того, как он писал себе.

1
ответ дан 24.11.2019, 14:34