Приведення типів – casting

У наступному прикладі я покажу, як визначити, яка кнопка була натиснута, викликаючи метод getSource () класу ActionEvent Мінлива evt – це посилання на обєкт – подія, яка живе де – то в памяті компютера Але, як написано в документації Java, метод getSource () повертає джерело події як екземпляр типу Object, який є предком всіх класів Java, включаючи компоненти вікна

Так зроблено для того, щоб цей метод був універсальним, і працював для будь-яких компонент Але ми – то знаємо напевно, що в нашому вікні єдиною причиною такої події можуть бути тільки кнопки Тому минаводимо тип (we cast the type) возвращаемого Object до типу JButton, розміщуючи тип в дужках перед імям методу: JButton clickedButton = (JButton) evtgetSource ()

Зліва від знаку рівності оголошена змінна типу JButton і, хоча метод getSource () повертає дані типу Object, ми ніби говоримо JVM:Не хвилюйся, я знаю напевно, що це – примірник JButton

 

Тільки після приведення типу Object до JButton нам разрешаетсявизвать метод getText (), який належить класу JButton

import javaawteventActionListener import javaawteventActionEvent import javaxswingJOptionPane

import javaxswingJButton

public class CalculatorEngine implements ActionListener {

public void actionPerformed(ActionEvent e){

/ / Отримуємо джерело події

JButton clickedButton= (JButton)egetSource()

/ / Отримуємо напис на кнопці

String clickedButtonLabel = clickedButtongetText()

/ / Додаємо напис на кнопці до тексту вікна повідомлення

JOptionPaneshowConfirmDialog(null,&quotYou  pressed &quot +

clickedButtonLabel,

&quotJust a test&quot, JOptionPanePLAIN_MESSAGE)

}

}

Наприклад, якщо ви натиснете кнопку Пять, то побачите це окносообщенія:

Але що, якщо події вікна будуть викликатися не тільки кнопками, але і якими – небудь іншими компонентами Не завжди потрібно приводити кожен обєкт до типу JButton Для цих випадків ви повинні використовувати спеціальний оператор Java, званий instanceof, щоб правильно зробити приведення типу Наступний приклад спочатку перевіряє, обєкт якого типу викликав подія, а потім робить приведення типу до JButton або до JTextField:public void actionPerformed(ActionEvent evt){ JTextField myDisplayField=null

JButton clickedButton=null

Object eventSource = evthetSource()

if (eventSource  instanceof JButton){

clickedButton = (JButton) eventSource

}else if (eventSource  instanceof JTextField){

myDisplayField = (JTextField)eventSource

}

}

Нашому калькулятору потрібно виконувати різні частини програми для різних кнопок, і наступний приклад показує, як це зробити

public void actionPerformed(ActionEvent e){ Object src = egetSource()

if (src == buttonPlus){

/ / Тут має бути текст програми, складати числа

    } else if (src == buttonMinus){

/ / Тут має бути текст програми, що віднімає числа

    }else if (src == buttonDivide){

/ / Тут – розподіл чисел

    } else if (src == buttonMultiply){

/ / Тут – текст програми, умножающий числа

}

}

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*