Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package mieszacz;
- import java.awt.Color;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.BoxLayout;
- import javax.swing.JButton;
- import javax.swing.JComboBox;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- /**Całe GUI i interfejs ActionListener implementujemy w jednej klasie. Dzięki
- * temu możemy łatwo odwoływać się do wszystkich kontrolek zadeklarowanych jako
- * pola klasy z wnętrza funkcji ActionPerformed.
- *
- * @author Michał Lewandowski
- */
- public class Gui implements ActionListener{
- //Wszystkie kontrolki jako pola klasy. Dzięki temu "widać" je z każdej funkcji,
- //w tym też z ActionPerformed.
- JFrame frame;
- JTextField text1, text2;
- JLabel label1, label2, label3;
- JButton but1, but2, but3, but4;
- Container mainPane;
- JPanel panel1, panel2, panel3, panel4, panel5;
- JComboBox combo;
- public Gui() { //W konstruktorze tworzymy GUI
- frame = new JFrame("Kalkulator");
- frame.getContentPane().setBackground(Color.yellow);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- mainPane = frame.getContentPane(); //pobranie referencji głównego panelu ramki
- mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS)); //dla mainPane użyjemy BoxLayout
- frame.setMinimumSize(new Dimension(300,100));
- //Cztery panele dla naszych kontrolek
- // String[] wybor = {"+","-","*","/"};
- combo = new JComboBox ();
- combo.addItem("+");
- combo.addItem("-");
- combo.addItem("*");
- combo.addItem("/");
- combo.addActionListener(this);
- combo.setPreferredSize(new Dimension(100,25));
- panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
- // panel1.setBackground(Color.yellow);
- panel4 = new JPanel(new FlowLayout(FlowLayout.CENTER));
- // panel4.setBackground(Color.red);
- panel2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
- // panel2.setBackground(Color.yellow);
- panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
- // panel3.setBackground(Color.red);
- panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
- // panel3.setBackground(Color.red);
- panel5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
- mainPane.add(panel1);
- mainPane.add(panel4);
- mainPane.add(panel2);
- mainPane.add(panel5);
- mainPane.add(panel3);
- //Dodajemy kontrolki
- label1 = new JLabel("Pierwsza liczba:");
- label1.setForeground(new Color(15,58,150));
- text1 = new JTextField(15);
- panel1.add(label1);
- panel1.add(text1);
- label2 = new JLabel("Druga liczba:");
- label2.setForeground(new Color(115,58,10));
- text2 = new JTextField(15);
- panel4.add(label2);
- panel4.add(text2);
- /* but1 = new JButton("+");
- but1.setForeground(Color.RED);
- but1.addActionListener(this); //"this" bo przycisk i obsługa ActionListener są w tej samej klasie
- but2 = new JButton("-");
- but2.setForeground(Color.GREEN);
- but2.addActionListener(this);
- but3 = new JButton("*");
- but3.setForeground(Color.BLUE);
- but3.addActionListener(this);
- but4 = new JButton("/");
- but4.setForeground(Color.ORANGE);
- but4.addActionListener(this);*/
- panel5.add(combo);
- label3 = new JLabel("Wynik:");
- // label3.setForeground(new Color(200,200,200));
- /* panel2.add(but1);
- panel2.add(but2);
- panel2.add(but3);
- panel2.add(but4);*/
- panel3.add(label3);
- //Wyświetlenie GUI na ekranie
- frame.pack();
- frame.setVisible(true);
- }
- /* Obsługę zdarzeń implementujemy w tej samej klasie co GUI. Dzięki temu mamy bezpośredni
- dostęp do wszystkich kontrolek zadeklarowanych jako pola klasy.*/
- @Override
- public void actionPerformed(ActionEvent e) {
- SpinnerModel model=new SpinnerNumberModel(0,Double.MIN_VALUE,Double.MAX_VALUE,0.1);
- JSpinner napis1=new JSpinner(model);
- float liczba1=(float)napis1.getValue();
- String napis2 = text2.getText();
- float liczba2 = Float.valueOf(napis2);
- /* if(e.getActionCommand().equals("+")){ //tak rozpoznajemy który przycisk został naciśnięty
- label3.setText("Wynik: " + (liczba1 + liczba2));
- }
- if(e.getActionCommand().equals("-")){ //tak rozpoznajemy który przycisk został naciśnięty
- label3.setText("Wynik: " + (liczba1 - liczba2));
- }
- if(e.getActionCommand().equals("*")){ //tak rozpoznajemy który przycisk został naciśnięty
- label3.setText("Wynik: " + (liczba1 * liczba2));
- }
- if(e.getActionCommand().equals("/")){ //tak rozpoznajemy który przycisk został naciśnięty
- label3.setText("Wynik: " + (liczba1 / liczba2));
- } */
- Object z = e.getSource();
- if(z==combo)
- {
- String wyb = combo.getSelectedItem().toString();
- if(wyb.equals("+"))
- label3.setText("Wynik: " + (liczba1 + liczba2));
- if(wyb.equals("-"))
- label3.setText("Wynik: " + (liczba1 - liczba2));
- if(wyb.equals("*"))
- label3.setText("Wynik: " + (liczba1 * liczba2));
- if(wyb.equals("/"))
- label3.setText("Wynik: " + (liczba1 / liczba2));
- }
- /*
- Gdyby zaszła potrzeba konwersji napisu na liczbę, można użyć funkcji statycznych
- tzw. klas opakowujących typy podstawowe. Np. dla typu "double" będzie to klasa "Double":
- double liczba = Double.valueOf(napis);
- Konwersji w drugą stronę dokonujemy analogicznie:
- String napis = Double.toString(liczba);
- Uwaga! Za każdym razem należy pamiętać o obłudze wyjątków, jakie rzucają zastosowane funkcje!
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement