Як передавати дані між класами

У наступній версії класу CalculatorEngine ми додамо конструктор У цього конструктора буде один аргумент типу Calculator Не дивуйтеся, аргументи у методів можуть мати тип класів, створених вами

JVM виконує конструктор класу CalculatorEngine під час створення цього примірника в памяті Клас Calculator створює CalculatorEngine, і передає його конструктору посилання на себе:

CalculatorEngine calcEngine = new CalculatorEngine(this)

Це посилання вказує на те місце в памяті, де знаходиться екземпляр класу Calculator Конструктор CalculatorEngine зберігає це значення в змінній parent, щоб потім використовувати його в методі actionPerformed () для доступу до дисплея калькулятора

parentdisplayFieldgetText()

parentdisplayFieldsetText(dispFieldText + clickedButtonLabel)

Ці два рядки були взяті з наступного прикладу: import javaawteventActionListener import javaawteventActionEvent import javaxswingJButton

public class CalculatorEngine implements ActionListener {Calculator parent / / Посилання на Calculator

/ / Конструктор зберігає посилання на вікно калькулятора

/ / У змінній класу parent CalculatorEngine (Calculator parent) {

thisparent = parent

}

public void actionPerformed(ActionEvent e){

/ / Отримати джерело поточного дії

JButton clickedButton =  (JButton) egetSource()

/ / Отримати поточний текст з поля виводу (дисплея)

/ / Калькулятора

String dispFieldText = parentdisplayFieldgetText()

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

String clickedButtonLabel = clickedButtongetText()

parentdisplayFieldsetText(dispFieldText +

clickedButtonLabel)

}

}

Коли ви розкажете змінну для зберігання посилання на екземпляр якого – небудь класу, ця змінна повинна мати, або тип цього класу, або тип одного з його суперкласів

Будь клас в Java походить від класу Object, і якщо, наприклад, клас Fish – це спадкоємець класу Pet, то кожна з цих рядків правильна:

Fish myFish = new Fish() Pet  myFish = new Fish()

Object myFish = new Fish()

Доробляємо калькуляторДавайте визначимося з декількома правилами (з алгоритмом), Заяким повинен працювати наш калькулятор:

1 Спочатку користувач вводить всі цифри першого чісла2 Якщо користувач натисне яку – небудь з кнопок арифметичної дії +, -, / or *, то треба зберегти перше число і вибране дію в полях класу, і стерти число з дисплея калькулятора3 Потім користувач вводить друге число і натискає кнопкуодно 4 Конвертацію строкове значення з дисплея в числовий тип double, щоб мати можливість зберігати великі дробові числа Провести арифметичну дію за допомогою обраного дії і першого числа, збережених в кроці 2

5 Показати результат кроку 4 на дисплеї калькулятора і сохранітьето значення у змінній, яка використовувалася в кроці 2

Всі ці кроки ми запрограмуємо в класі CalculatorEngine Поки ви будете читати наступний текст програми, памятайте, що метод actionPerformed () буде викликатися після кожного натискання на кнопку і дані між викликами цього методу будуть зберігатися в змінних selectedAction і currentResult

import javaawteventActionListener import javaawteventActionEvent import javaxswingJButton

public class CalculatorEngine implements ActionListener {Calculator parent / / Посилання на вікно калькулятора

char selectedAction = ‘; / / +, -, /, Або *

double currentResult =0

/ / Конструктор зберігає посилання на вікно калькулятора

/ / У змінній екземпляра класу

CalculatorEngine(Calculator parent){

thisparent = parent

}

public void  actionPerformed(ActionEvent e){

/ / Отримати джерело дії

JButton clickedButton =  (JButton) egetSource() String dispFieldText=parentdisplayFieldgetText() double displayValue=0

/ / Отримати число з дисплея калькулятора,

/ / Якщо він не порожній

/ / Знак оклику – це оператор заперечення

if (&quot&quot.equals(dispFieldText)){

displayValue= DoubleparseDouble(dispFieldText)

}

Object src = egetSource()

/ / Для кожної кнопки арифметичної дії

/ / Запамятати його: +, -, /, або *, зберегти поточне число

/ / У змінній currentResult, і очистити дисплей

/ / Для введення нового числа

if (src == parentbuttonPlus){

selectedAction = +; currentResult=displayValue parentdisplayFieldsetText(&quot&quot)

} else if (src == parentbuttonMinus){

selectedAction = -; currentResult=displayValue parentdisplayFieldsetText(&quot&quot)

}else if (src == parentbuttonDivide){

selectedAction = /; currentResult=displayValue parentdisplayFieldsetText(&quot&quot)

} else if (src == parentbuttonMultiply){

selectedAction = *; currentResult=displayValue parentdisplayFieldsetText(&quot&quot)

} else if (src == parentbuttonEqual){

/ / Здійснити арифметичне дію, залежно

/ / Від selectedAction, оновити змінну currentResult

/ / І показати результат на дисплеї

if (selectedAction==+){

currentResult+=displayValue

/ / Конвертацію результат в рядок, додаючи його

/ / До порожньої рядку і показати його

parentdisplayFieldsetText(&quot&quot+currentResult)

}else if (selectedAction==-){

currentResult -=displayValue

parentdisplayFieldsetText(&quot&quot+currentResult)

}else if (selectedAction==/){

currentResult /=displayValue

parentdisplayFieldsetText(&quot&quot+currentResult)

}else if (selectedAction==*){

currentResult*=displayValue

parentdisplayFieldsetText(&quot&quot+currentResult)

}

} else{

/ / Для всіх цифрових кнопок приєднати напис на

/ / Кнопці до напису в дисплеї

String clickedButtonLabel= clickedButtongetText()

parentdisplayFieldsetText(dispFieldText +

clickedButtonLabel)

}

Наша заключна версія вікна калькулятора буде виглядати як –

то так:

Клас Calculator робить наступні дії:

ü  Створює і показує всі компоненти окнаü  Створює екземпляр слухача CalculatorEngineü  Передає CalculatorEngine посилання на себяü  Реєструє цього слухача у всіх компонентах, які створюють події

Ось остання версія класу Calculator:

import javaxswing*

import javaawtGridLayout

import javaawtBorderLayout

public class Calculator {

/ / Оголошуємо і инициализируем компоненти вікна

JButton button0=new JButton(&quot0&quot) JButton button1=new JButton(&quot1&quot) JButton button2=new JButton(&quot2&quot)

JButton button3=new JButton(&quot3&quot) JButton button4=new JButton(&quot4&quot) JButton button5=new JButton(&quot5&quot) JButton button6=new JButton(&quot6&quot) JButton button7=new JButton(&quot7&quot) JButton button8=new JButton(&quot8&quot) JButton button9=new JButton(&quot9&quot) JButton buttonPoint = new JButton(&quot.&quot) JButton buttonEqual=new JButton(&quot=&quot)

JButton buttonPlus=new JButton(&quot+&quot) JButton buttonMinus=new JButton(&quot-&quot) JButton buttonDivide=new JButton(&quot/&quot) JButton buttonMultiply=new JButton(&quot*&quot)

JPanel windowContent = new JPanel() JTextField displayField = new JTextField(30)

/ / Конструктор

Calculator(){

/ / Встановити менеджер розташування для панелі

BorderLayout bl = new BorderLayout()

windowContentsetLayout(bl)

/ / Додаємо дисплей у верхній частині вікна

windowContentadd(&quotNorth&quot,displayField)

/ / Створюємо панель з менеджером розташування GridLayout

/ / В якій буде 12 кнопок – 10 цифр, і

/ / Кнопки точка і дорівнює

JPanel p1 = new JPanel()

GridLayout gl =new GridLayout(4,3)

p1setLayout(gl) p1add(button1) p1add(button2) p1add(button3) p1add(button4) p1add(button5) p1add(button6) p1add(button7) p1add(button8) p1add(button9) p1add(button0)

p1add(buttonPoint)

p1add(buttonEqual)

/ / Додаємо панель p1 в центр вікна

windowContentadd(&quotCenter&quot,p1)

/ / Створюємо панель з менеджером розташування GridLayout

/ / На якій буде 4 кнопки –

/ / Плюс, Мінус, Розділити і Помножити

JPanel p2 = new JPanel()

GridLayout gl2 =new GridLayout(4,1)

p2setLayout(gl2) p2add(buttonPlus) p2add(buttonMinus) p2add(buttonMultiply) p2add(buttonDivide)

/ / Додаємо панель p2 в праву частину вікна

windowContentadd(&quotEast&quot,p2)

/ / Створюємо frame і додаємо в нього вміст JFrame frame = new JFrame(&quotCalculator&quot)

framesetContentPane(windowContent)

/ / Встановлюємо розмір вікна, так щоб вмістилися

/ / Всі компоненти

framepack()

/ / Показуємо вікно

framesetVisible(true)

/ / Створюємо примірник слухача подій і

/ / Реєструємо його в кожній кнопці

CalculatorEngine calcEngine = new CalculatorEngine(this)

button0addActionListener(calcEngine) button1addActionListener(calcEngine) button2addActionListener(calcEngine) button3addActionListener(calcEngine) button4addActionListener(calcEngine) button5addActionListener(calcEngine) button6addActionListener(calcEngine) button7addActionListener(calcEngine) button8addActionListener(calcEngine) button9addActionListener(calcEngine)

buttonPointaddActionListener(calcEngine) buttonPlusaddActionListener(calcEngine) buttonMinusaddActionListener(calcEngine) buttonDivideaddActionListener(calcEngine) buttonMultiplyaddActionListener(calcEngine) buttonEqualaddActionListener(calcEngine)

}

public static void main(String[] args) {

/ / Створюємо екземпляр класу Калькулятор Calculator calc = new Calculator()

}

}

Тепер скомпілюємо проект і запустимо клас Calculator Вона працює майже так само, як і справжні калькулятори Вітаю Це ваша перша програма, яка може стати в нагоді багатьом людям – подаруйте її своїм друзям

Для того, щоб краще розуміти, як працює ця програма, я рекомендую вам освоїтиналагодження програм Будь ласка, прочитайте Додаток А про відладчик Eclipse, а потім продовжуйте читання

Джерело: 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>

*

*