|
|
|
Помощь в некоторых вопросах по написанию кода Java
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, уважаемые форумчане. Недавно стал изучать язык Java по книге Файн Я. "Программирование на Java для детей, родителей, дедушек и бабушек (2011)". Разбирают в этой книге несколько примеров, в частности, как сделать простейший калькулятор. Много моментов понятны по книге и калькулятору, но интересуют несколько вопросов по примеру. Кому не сложно, сможете подсказать. Калькулятор в этой книге можно сделать с помощью 2-ух классов: Calculator и CalculatorEngine. В классе Calculator все понятно, но в классе CalculatorEngine начались непонятности. Класс CalculatorEngine: import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JButton; public class CalculatorEngine implements ActionListener { Calculator parent; char selectedAction = ' '; double currentResult =0; CalculatorEngine(Calculator parent) { this.parent = parent; } public void actionPerformed(ActionEvent e){ JButton clickedButton = (JButton) e.getSource(); String dispFieldText=parent.displayField.getText(); double displayValue=0; if (!"".equals(dispFieldText)){ displayValue= Double.parseDouble(dispFieldText); } Object src = e.getSource(); if (src == parent.buttonPlus){ selectedAction = '+'; currentResult=displayValue; parent.displayField.setText(""); } else if (src == parent.buttonMinus){ selectedAction = '-'; currentResult=displayValue; parent.displayField.setText(""); } else if (src == parent.buttonDel){ selectedAction = '/'; currentResult=displayValue; parent.displayField.setText(""); } else if (src == parent.buttonUmn){ selectedAction = '*'; currentResult=displayValue; parent.displayField.setText(""); } else if (src == parent.buttonEqual){ if (selectedAction=='+'){ currentResult+=displayValue; parent.displayField.setText(""+currentResult); }else if (selectedAction=='-'){ currentResult -=displayValue; parent.displayField.setText(""+currentResult); }else if (selectedAction=='/'){ currentResult /=displayValue; parent.displayField.setText(""+currentResult); }else if (selectedAction=='*'){ currentResult*=displayValue; parent.displayField.setText(""+currentResult); } } else{ String clickedButtonLabel= clickedButton.getText(); parent.displayField.setText(dispFieldText + clickedButtonLabel); } } } Может кто-нибудь хотя бы примерно рассказать, что каждая строчка обозначает (выделено красным), или расписать логику (например, Object src = e.getSource(); - означает то-то-то-то, строка if (!"".equals(dispFieldText)){ displayValue= Double.parseDouble(dispFieldText); - означает то-то-то-то). Класс Calculator (тут все понятно): import javax.swing.*; import java.awt.GridLayout; import java.awt.BorderLayout; public class Calculator { JPanel windowContent; JTextField displayField; JButton button0; JButton button1; JButton button2; JButton button3; JButton button4; JButton button5; JButton button6; JButton button7; JButton button8; JButton button9; JButton buttonPoint; JButton buttonEqual; JPanel p1; JPanel p2; JButton buttonPlus; JButton buttonMinus; JButton buttonUmn; JButton buttonDel; Calculator(){ windowContent= new JPanel(); BorderLayout bl = new BorderLayout(); windowContent.setLayout(bl); displayField = new JTextField(30); windowContent.add("North",displayField); p2 = new JPanel(); GridLayout gll = new GridLayout(4,1); p2.setLayout(gll); button0=new JButton("0"); button1=new JButton("1"); button2=new JButton("2"); button3=new JButton("3"); button4=new JButton("4"); button5=new JButton("5"); button6=new JButton("6"); button7=new JButton("7"); button8=new JButton("8"); button9=new JButton("9"); buttonPoint = new JButton("."); buttonEqual=new JButton("="); buttonPlus=new JButton("+"); buttonMinus=new JButton("-"); buttonUmn=new JButton("*"); buttonDel=new JButton("/"); p1 = new JPanel(); GridLayout gl =new GridLayout(4,3); p1.setLayout(gl); p1.add(button1); p1.add(button2); p1.add(button3); p1.add(button4); p1.add(button5); p1.add(button6); p1.add(button7); p1.add(button8); p1.add(button9); p1.add(button0); p1.add(buttonPoint); p1.add(buttonEqual); p2.add(buttonPlus); p2.add(buttonMinus); p2.add(buttonUmn); p2.add(buttonDel); windowContent.add("Center",p1); windowContent.add("East",p2); JFrame frame = new JFrame("Calculator"); frame.setContentPane(windowContent); frame.pack(); frame.setVisible(true); CalculatorEngine calcEngine = new CalculatorEngine(this); button0.addActionListener(calcEngine); button1.addActionListener(calcEngine); button2.addActionListener(calcEngine); button3.addActionListener(calcEngine); button4.addActionListener(calcEngine); button5.addActionListener(calcEngine); button6.addActionListener(calcEngine); button7.addActionListener(calcEngine); button8.addActionListener(calcEngine); button9.addActionListener(calcEngine); buttonPoint.addActionListener(calcEngine); buttonPlus.addActionListener(calcEngine); buttonMinus.addActionListener(calcEngine); buttonDel.addActionListener(calcEngine); buttonUmn.addActionListener(calcEngine); buttonEqual.addActionListener(calcEngine); } public static void main(String[] args) { Calculator calc = new Calculator(); } } Заранее благодарен всем откликнувшимся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 21:40 |
|
||
|
Помощь в некоторых вопросах по написанию кода Java
|
|||
|---|---|---|---|
|
#18+
mishanches public class CalculatorEngine implements ActionListener { Calculator parent; char selectedAction = ' '; double currentResult =0; CalculatorEngine(Calculator parent) { this.parent = parent; } Начну с первой вашей красной строчки, прочитайте вот это https://goo.gl/SkUl7t про ключевое слово this Кратко: CalculatorEngine(Calculator parent) тип класса Calculator и название переменной parent указывают констуктору объекты какого типа он может принимать, в данном случае вы понимаете, что это тип Calculator Но выше вы видите, что объявлена переменная такого же типа (Calculator) и с таким же именем - parent. this.parent - означает, что мы имеем ввиду переменную, которая объявлена в классе CalculatorEngine, а не та , которая указана как входящий параметр конструктора этого же класса. Чтобы было проще понять, перепишем код вот так, но это, как говорится, не кошерно, хотя я иногда использую. public class CalculatorEngine implements ActionListener { Calculator parent; char selectedAction = ' '; double currentResult =0; CalculatorEngine(Calculator parentIn) { parent = parentIn; } Короче, чтобы компилятор понял какой именно parent какому parent вы присваиваете, компилятору надо указать это слово this. Вообще в любой IDE при выделении переменной в коде, можно сразу увидеть где она еще используется, да и плюс переменные на входе и переменные объявленные в классе отличаются в IDE по цвету. Все становится понятным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2016, 21:56 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=83&tid=2123529]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 326ms |

| 0 / 0 |
