GUI sčítání a odčítání – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

GUI sčítání a odčítání – Java – Fórum – Programujte.comGUI sčítání a odčítání – Java – Fórum – Programujte.com

 

Nicolas
~ Anonymní uživatel
94 příspěvků
30. 7. 2011   #1
-
0
-

Ahoj, chtěl bych naučit kalkulačku počítat, ale nevím si rady.

Vložil jsem si zatím jen tlačítka +, -, =, 1, 2 a JTextArea.

Příklad problému.

1) Zadám číslo A (ať už vypíšu z klávesnice nebo tlačítkem);

2) Zmáčknu na + (po kliku na + přiřadim číslu A poměnou, ale nevím jak přiřadit +, -, *, / aby to na konci, až kliknu na = vypočítalo příklad);

3) Zadám číslo B (ať už vypíšu z klávesnice nebo tlačítkem);

4) Zmáčknu na = (po kliku na = přiřadímčíslu B proměnou, ale nevím jak ty proměný s + dám dokupy)

Teď jsem tedy v bodě kde v class AkceTlaciko1 a 2 přiřadim proměnou plus, resp. minus, ale nevím jak to sečíst. Vytvořit si ještě další proměnou kde se budou data hodnoty sčítat/ odčítat? Ale nevím jak tam dotlačít že to chci sečíst nebo odečíst. Dá se +, -, *, / dát taky nějak do proměný?

Kód níže.

Díky,

Nicolas

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Nok {
  public static void main (String []arg) {
    Novya apl = new Novya();

  }
}
  class Novya extends JFrame {

    JButton tl1 = new JButton("+");
    JButton tl2 = new JButton("-");
    JButton tl3 = new JButton("=");
    JButton tl4 = new JButton("1");
    JButton tl5 = new JButton("2");
    JTextArea tko = new JTextArea("0", 5, 30);

    public Novya () {
      super ("Nadpis okna");
      setSize (400,200);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
getContentPane().setLayout(new FlowLayout());
tl1.addActionListener(new AkceTlacitko1());
tl2.addActionListener(new AkceTlacitko2());
tl3.addActionListener(new AkceTlacitko3());
tl4.addActionListener(new AkceTlacitko4());
tl5.addActionListener(new AkceTlacitko4());
getContentPane().add(tl1);
getContentPane().add(tl2);
getContentPane().add(tl3);
getContentPane().add(tl4);
getContentPane().add(tl5);
getContentPane().add(tko);
   }
class AkceTlacitko1 implements ActionListener {
public void actionPerformed (ActionEvent e) {
String plus=tko.getText();
int i = Integer.parseInt(plus);


    }
  }
class AkceTlacitko2 implements ActionListener {
public void actionPerformed (ActionEvent e) {
String minus=tko.getText();
int i = Integer.toString(minus)


    }
  }
class AkceTlacitko3 implements ActionListener {
public void actionPerformed (ActionEvent e) {
String jmenoTlacitka3=((JButton)e.getSource()).getText();

    }
  }
class AkceTlacitko4 implements ActionListener {
public void actionPerformed (ActionEvent e) {
String pamatuj=((JButton)e.getSource()).getText();
  tko.setText(pamatuj);
    }
  }
}

Nahlásit jako SPAM
IP: 82.144.151.–
liborb
~ Redaktor
+18
Guru
1. 8. 2011   #2
-
0
-

Samozřejmě dá. Buď jako znak nebo si můžeš vytvořit celočíselnou proměnnou a do ní uložit 1 pro +, 2 pro - atd. Je to jenom na tobě. A po stisku = se koukneš ... aha je to '+' nebo 1, takže udělám A+B. Na to se krásně hodí switch.

Nahlásit jako SPAM
IP: 78.80.52.–
Nicolas
~ Anonymní uživatel
94 příspěvků
2. 8. 2011   #3
-
0
-

#2 liborb
Nejde mně ale aby při kliku na AkceTlačítko3 což je = aby použilo proměnnou třebas z AkceTlačítko1 kvůli "rozsahu platnosti proměnné" která je podle mého začátečnického rozoumku omezená závorkama {{AkceTlacitko1 až 4}}. V tý knížce co mám jsem se nedočetl jak to obelstít :-(

Pokud bych to překonal, tak bych si asi dovedl představit to dovést do zdárného konce, ale to bych zbytečně předbíhal :-)

N.

Nahlásit jako SPAM
IP: 82.144.151.–
liborb
~ Redaktor
+18
Guru
3. 8. 2011   #4
-
+1
-
Zajímavé

Ano nevidíš a proto můžeš jít cestou členské proměnné. Tam co máš definovaná tlačítka jako např.

JButton tl1 = new JButton("+");

přidej definici členských proměnných, např:

char znamenko;
int cislo;

A v jednotlivých AkceTlačítkoX si ulož o jaký se jedná znak, tj. např. pro sčítání:

class AkceTlacitko1 implements ActionListener {
	public void actionPerformed (ActionEvent e) {
		znamenko = '+';
		cislo = Integer.parseInt(tko.getText());
	}
}

no a pak v reakci na stisk = bude něco jako:

int druheCislo = Integer.parseInt(tko.getText());

switch(znamenko) {
	case('+'):
		vysledek = cislo + druheCislo;
		break;
	case('-'):
		// atd.		
};
Nahlásit jako SPAM
IP: 78.80.52.–
Nicolas
~ Anonymní uživatel
94 příspěvků
4. 8. 2011   #5
-
0
-

#4 liborb
No super, funguje :-)

Mám radost jak malej kluk. Ještě si s tím trochu vyhraju, abych to doladil a pak to hodím do jar.

Pro info posílám kód.

Díky moc, N.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Novy {
  public static void main (String []arg) {
    Novya apl = new Novya();
  }
}
  class Novya extends JFrame {

char znamenko;
int cislo;
int druhecislo;
int vysledek;
String i;

    JTextArea to = new JTextArea("0", 1, 12);

    JButton tl1 = new JButton("1");
    JButton tl2 = new JButton("2");
    JButton tl3 = new JButton("3");
    JButton tl4 = new JButton("4");
    JButton tl5 = new JButton("5");
    JButton tl6 = new JButton("6");
    JButton tl7 = new JButton("7");
    JButton tl8 = new JButton("8");
    JButton tl9 = new JButton("9");
    JButton tl10 = new JButton("0");
    JButton tl11 = new JButton("+");
    JButton tl12 = new JButton("-");
    JButton tl13 = new JButton("*");   
    JButton tl14 = new JButton("/");
    JButton tl15 = new JButton("=");


    public Novya () {
      super ("Nadpis okna");
      setSize (160,230);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
getContentPane().setLayout(new FlowLayout());

tl1.addActionListener(new AkceTlacitko1());
tl2.addActionListener(new AkceTlacitko1());
tl3.addActionListener(new AkceTlacitko1());
tl4.addActionListener(new AkceTlacitko1());
tl5.addActionListener(new AkceTlacitko1());
tl6.addActionListener(new AkceTlacitko1());
tl7.addActionListener(new AkceTlacitko1());
tl8.addActionListener(new AkceTlacitko1());
tl9.addActionListener(new AkceTlacitko1());
tl10.addActionListener(new AkceTlacitko1());
tl11.addActionListener(new AkceTlacitko2());
tl12.addActionListener(new AkceTlacitko3());
tl13.addActionListener(new AkceTlacitko4());
tl14.addActionListener(new AkceTlacitko5());
tl15.addActionListener(new AkceTlacitko6());
getContentPane().add(to);
getContentPane().add(tl1);
getContentPane().add(tl2);
getContentPane().add(tl3);
getContentPane().add(tl4);
getContentPane().add(tl5);
getContentPane().add(tl6);
getContentPane().add(tl7);
getContentPane().add(tl8);
getContentPane().add(tl9);
getContentPane().add(tl10);
getContentPane().add(tl11);
getContentPane().add(tl12);
getContentPane().add(tl13);
getContentPane().add(tl14);
getContentPane().add(tl15);

   }
class AkceTlacitko1 implements ActionListener {
public void actionPerformed (ActionEvent e) {

String tlacitko=((JButton)e.getSource()).getText();
  to.setText(tlacitko);

    }
  }

class AkceTlacitko2 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '+';
cislo = Integer.parseInt(to.getText());

    }
  }
class AkceTlacitko3 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '-';
cislo = Integer.parseInt(to.getText());

    }
  }
class AkceTlacitko4 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '*';
cislo = Integer.parseInt(to.getText());


    }
  }
class AkceTlacitko5 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '/';
cislo = Integer.parseInt(to.getText());


    }
  }
class AkceTlacitko6 implements ActionListener {
public void actionPerformed (ActionEvent e) {

int druhecislo = Integer.parseInt(to.getText());
switch (znamenko) {
  case ('+'):
    vysledek = cislo + druhecislo;
    break;
  case ('-'):
    vysledek = cislo - druhecislo;
    break;
  case ('*'):
    vysledek = cislo * druhecislo;
    break;
  case ('/'):
    vysledek = cislo / druhecislo;
    break;
      };
String i = Integer.toString(vysledek);
to.setText(i);

    }
  }

}

Nahlásit jako SPAM
IP: 62.209.192.–
liborb
~ Redaktor
+18
Guru
5. 8. 2011   #6
-
0
-

Ještě jedna drobnost, nemáš ošetřeno dělení 0.

Nahlásit jako SPAM
IP: 78.80.52.–
Nicolas
~ Anonymní uživatel
94 příspěvků
5. 8. 2011   #7
-
0
-

#6 liborb

Inu, ono toho je víc, ale to už si nějak snad poradím, kdyžtak dám vědět :-)

Teď se zas trápím s SQL...

Vlákno je možné označit jako vyřešeno.

N.
 

Nahlásit jako SPAM
IP: 62.209.192.–
Nicolas
~ Anonymní uživatel
94 příspěvků
7. 8. 2011   #8
-
0
-

#6 liborb
tak jsem zpět :-) vyjímku jsem sice dokázal ošetřit, ale "zaboha" nemůžu přijít na to, jak mám udělat, aby se mně v textArea objevilo (podobně jako ve windows kalkulačce) Cannot devide by zero.

Divný je, teda mně to připadá divný :-), že když dám do řádku 145 System.out.println tak to vypíše co chci, ale když se pokusím o to.setText("Text"); tak to nic neuděla.

Porádíš/ te pls?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Novy {
  public static void main (String []arg) {
    Novya apl = new Novya();
  }
}
  class Novya extends JFrame {

char znamenko;
int cislo;
int druhecislo;
int vysledek;
String i;

    JTextArea to = new JTextArea("0", 1, 16);

    JButton tl1 = new JButton("1");
    JButton tl2 = new JButton("2");
    JButton tl3 = new JButton("3");
    JButton tl4 = new JButton("4");
    JButton tl5 = new JButton("5");
    JButton tl6 = new JButton("6");
    JButton tl7 = new JButton("7");
    JButton tl8 = new JButton("8");
    JButton tl9 = new JButton("9");
    JButton tl10 = new JButton("0");
    JButton tl11 = new JButton("+");
    JButton tl12 = new JButton("-");
    JButton tl13 = new JButton("*");   
    JButton tl14 = new JButton("/");
    JButton tl15 = new JButton("=");
    JButton tl16 = new JButton("C");


    public Novya () {
      super ("Nadpis okna");

      setSize (201,181);

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
getContentPane().setLayout(new FlowLayout());

tl1.addActionListener(new AkceTlacitko1());
tl2.addActionListener(new AkceTlacitko1());
tl3.addActionListener(new AkceTlacitko1());
tl4.addActionListener(new AkceTlacitko1());
tl5.addActionListener(new AkceTlacitko1());
tl6.addActionListener(new AkceTlacitko1());
tl7.addActionListener(new AkceTlacitko1());
tl8.addActionListener(new AkceTlacitko1());
tl9.addActionListener(new AkceTlacitko1());
tl10.addActionListener(new AkceTlacitko1());
tl11.addActionListener(new AkceTlacitko2());
tl12.addActionListener(new AkceTlacitko3());
tl13.addActionListener(new AkceTlacitko4());
tl14.addActionListener(new AkceTlacitko5());
tl15.addActionListener(new AkceTlacitko6());
tl16.addActionListener(new AkceTlacitko7());

getContentPane().add(to);
getContentPane().add(tl7);
getContentPane().add(tl8);
getContentPane().add(tl9);
getContentPane().add(tl14);
getContentPane().add(tl4);
getContentPane().add(tl5);
getContentPane().add(tl6);
getContentPane().add(tl13);
getContentPane().add(tl1);
getContentPane().add(tl2);
getContentPane().add(tl3);
getContentPane().add(tl12);
getContentPane().add(tl10);
getContentPane().add(tl16);
getContentPane().add(tl15);
getContentPane().add(tl11);


      setSize (200,180);
   }
class AkceTlacitko1 implements ActionListener {
public void actionPerformed (ActionEvent e) {

String tlacitko=((JButton)e.getSource()).getText();
  to.setText(tlacitko);

    }
  }

class AkceTlacitko2 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '+';
cislo = Integer.parseInt(to.getText());

    }
  }
class AkceTlacitko3 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '-';
cislo = Integer.parseInt(to.getText());

    }
  }
class AkceTlacitko4 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '*';
cislo = Integer.parseInt(to.getText());


    }
  }
class AkceTlacitko5 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '/';
cislo = Integer.parseInt(to.getText());


    }
  }
class AkceTlacitko6 implements ActionListener {
public void actionPerformed (ActionEvent e) {

int druhecislo = Integer.parseInt(to.getText());
switch (znamenko) {
  case ('+'):
    vysledek = cislo + druhecislo;
    break;
  case ('-'):
    vysledek = cislo - druhecislo;
    break;
  case ('*'):
    vysledek = cislo * druhecislo;
    break;
  case ('/'):
    try {
    vysledek = cislo / druhecislo;
    } catch (ArithmeticException v){
       
    }
    break;
      };
String i = Integer.toString(vysledek);
to.setText(i);

    }
  }
class AkceTlacitko7 implements ActionListener {
public void actionPerformed (ActionEvent e) {

znamenko = '=';
cislo = 0;
to.setText("0");

    }
  }
}

Nahlásit jako SPAM
IP: 82.144.151.–
liborb
~ Redaktor
+18
Guru
9. 8. 2011   #9
-
+1
-
Zajímavé

Nešel bych na řešení tohoto problému výjimkou. Ohřeji si polívčičku :), protože mě tato klasika na tento problém přijde dostatečná - obyčejná podmínka, takže kód by byl:

case('/'):
	if (druhecislo == 0) {
		to.setText("Nelze dělit nulou!");
		return;
	}
	else {
		vysledek = cislo / druhecislo;
		break;
	}
Nahlásit jako SPAM
IP: 78.80.52.–
Nicolas
~ Anonymní uživatel
94 příspěvků
15. 8. 2011   #10
-
0
-

#9 liborb
Díky, sice jsem to taky zkoušel přes pomínku, dělal jsem tam však nějakou chybku protože mně to nefungovalo. Takhle to je ale OK.

Nahlásit jako SPAM
IP: 82.144.151.–
Nicolas0
Návštěvník
15. 8. 2011   #11
-
0
-

Příspěvek od liborb z 03. 08. 2011 možno označit jako nejlepší odpověď. Vlákno možno uzavřít.

Nahlásit jako SPAM
IP: 62.209.192.–
Nicolas

Quis ut Deus?
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 33 hostů

Podobná vlákna

Scitani odcitani poli — založil James

Sčítání — založil Lukáš

Sčítání — založil sXe

Sčítaní matic — založil Roman

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý