• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mini bankomat JFrame pomoc

Object Storage Arubacloud
0 głosów
173 wizyt
pytanie zadane 18 maja 2019 w Java przez Michał Kamrowski Nowicjusz (120 p.)

Hej, potrzebuje sprawdzenia przez Was kodu i zrobienia tego, że po wpisaniu w TextFrame aktualizuje się saldo, a jeśli nie ma tyle na saldo to wyrzuca blad. Prosze o pomoc bo jestem mega zielony, przekopalem internet ale kody są dla mnie nieczytelne

 

package obiektowe;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class MojeOkienko extends JFrame implements ActionListener
{
    
private JScrollPane scrollPane;
private Wyplaty wyplaty;
double stan=500;
JButton bStan, bWyjdz, bWyplata;
JLabel lSaldo;
JFrame wyplata = new JFrame("Wyplata");

    public MojeOkienko()
    {
        setSize(500,200);
        setTitle("Testowa aplikacja");
        bStan = new JButton("Stan konta: ");
        bStan.setBounds(50,50,120,40);
        bStan.addActionListener(this);
       
        bWyjdz = new JButton("Wyjdz");
        add(bStan);
        setLayout(null);
        bWyjdz.setBounds(120, 120, 100, 20);
        add(bWyjdz);
        bWyjdz.addActionListener(this);
        
        bWyplata = new JButton("Wyplac");
        add(bWyplata);
        setLayout(null);
        bWyplata.setBounds(250,120,100,20);
        bWyplata.addActionListener(this);
       
        lSaldo = new JLabel("");
        lSaldo.setBounds(200, 60, 100, 20);
        add(lSaldo);
        
    }
    public static void main(String[] args) {
        MojeOkienko okienko = new MojeOkienko();
        okienko.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okienko.setVisible(true);
        
    }
    @Override
    public void actionPerformed(ActionEvent e)
    {
        Object zrodlo = e.getSource();
        if (zrodlo == bWyplata)
        {
        wyplaty = new Wyplaty(this);
        wyplaty.setVisible(true);
        
        }
        
        if (zrodlo == bStan)
        {
        lSaldo.setText(String.valueOf(stan +"zł"));
        }
        else if (zrodlo==bWyjdz)
        {
        dispose();
        }
    }

class Wyplaty extends JDialog implements ActionListener
{
    private JLabel lIlosc;
    private JTextField tIlosc;
    private JButton bCancel, bWyplac;
    private boolean WyplacData;
    
    public Wyplaty(JFrame owner)
    {
     super(owner, "Wyplacanie", true);
     setSize(500,200);
     setLayout(null);
     
     lIlosc = new JLabel("Ile chcesz wyplacic: ", JLabel.RIGHT);
     lIlosc.setBounds(0,40,150,20);
     add(lIlosc);
     
     tIlosc = new JTextField();
     tIlosc.setBounds(150,40,100,20);
     add(tIlosc);
     
     bWyplac = new JButton("Wyplac");
     bWyplac.setBounds(0,100,100,20);
     bWyplac.addActionListener(this);
     add(bWyplac);
     
     bCancel = new JButton("Cancel");
     bCancel.setBounds(120,100,100,20);
     bCancel.addActionListener(this);
     add(bCancel);
     }
    
    public String getUser()
    {
     return tIlosc.getText();
    }
    
    public boolean isWyplac()
    {
        return WyplacData;
    }
    
    @Override
    public void actionPerformed(ActionEvent e) 
    {
     Object zrodlo = e.getSource();
     if (zrodlo==bWyplac)
         WyplacData = true;
     else
         WyplacData = false;
     
     setVisible(false);
     
    }
    public void wyplaty(double tIlosc)
    {
    double nowystan = stan - tIlosc;
    stan = nowystan;
    }


}
}

komentarz 18 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Mógłbyś swoje ogólne pytanie rozbić na mniejsze "konkretniejsze" pytania. Wrzuciłeś mega duży kawałek kodu i nie wiadomo, których jego fragmentów nie rozumiesz. Myślę, że wtedy więcej osób bedzie mogło Ci pomoc i szybciej otrzymasz odpowiedz :)
komentarz 18 maja 2019 przez Michał Kamrowski Nowicjusz (120 p.)
Po prostu nie wiem w jakim miejscu, co i jak dodać.

Uruchom kod, a pewnie zrozumiesz o co mi chodzi. Chciałbym, że po wpisaniu w TextArea (jest jedno) odejmowało aktualne saldo, które jest wpisane w integer i, żeby po ponownym kliknieciu w "Saldo" się aktualizowało.

A drugie to logiczne, że jak określone saldo 500, potem np. -100zł =400zł to, żeby nie można było wypłacić więcej niż 400.
komentarz 18 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
No właśnie ja mam na samym starcie problem żeby Cie zrozumieć. Czytam pierwsze zdanie w którym wspominasz coś o jakimś komponencie TextArea... którego ja w tym kodzie nie widze :(

Przepraszam, jest inicjowany jakiś obiekt tego typu ale nigdzie go nie używasz w kodzie. Nie jestem biegły w tym frameworku, którego używasz dlatego trudno mi jest to sobie wyobrazić.

Mógłbyś wrzucić jakieś foto graficzne tego interfejsu?
komentarz 18 maja 2019 przez Michał Kamrowski Nowicjusz (120 p.)

Chodziło o TextField, już wrzucam. 

komentarz 18 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
private boolean WyplacData;

za co odpowiada ta zmienna?

1 odpowiedź

+1 głos
odpowiedź 18 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Dobra juz wiem o co chodzi.

Po pierwsze, dobra praktyka w Javie do kwot uzywaj zamiast double klasy BigDecimal

Na starcie

zamiast
double stan =500;

//uzyj tego
BigDecimal stan = new BigDecimal("500");

 

Pozniej polowy twojego kodu nie rozumiem natomiast do najwazniejszej rzeczy doszedlem. Zrob sobie funkcje do wyplaty pieniedzy. 


        public BigDecimal ustawNowyStanKonta() {
            //sprawdz stan konta
            BigDecimal stanKonta = stan;
            if (stanKonta.compareTo(BigDecimal.ZERO) > 0) {
                //pobierz kwote jaka chcesz wyplacic
                BigDecimal kwota = new BigDecimal(tIlosc.getText());
                //porownaj stan z wyplata
                //funkcja ta sprawdza czy stanKonta jest wiekszy niz kwota jaka chcesz wyplacic
                if (stanKonta.compareTo(kwota) == 1) {
                    stanKonta = stanKonta.subtract(kwota); //odejmij od stanu konta wyplacana kwote
                }
            }
            return stanKonta;
        }

nastepnie w przycisku "wyplac" dodaj wywolanie tej funkcji np w ten sposob:

  @Override
        public void actionPerformed(ActionEvent e) {
            lSaldo.setText(String.valueOf(ustawNowyStanKonta()) + " zl");
        }

 

komentarz 19 maja 2019 przez Michał Kamrowski Nowicjusz (120 p.)
Dziękuje, jesteś mistrz :)
komentarz 19 maja 2019 przez Michał Kamrowski Nowicjusz (120 p.)

@pawi125,

No nic, chyba jestem głupi :D

Zaktualizowałem kod o to co mi napisałeś. 

package obiektowe;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.math.BigDecimal;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class MojeOkienko extends JFrame implements ActionListener
{
	
private JScrollPane scrollPane;
private Wyplaty wyplaty;
BigDecimal stan = new BigDecimal("500");
JButton bStan, bWyjdz, bWyplata;
JLabel lSaldo;
JFrame wyplata = new JFrame("Wyplata");

    public MojeOkienko()
    {
        setSize(500,200);
        setTitle("Testowa aplikacja");
        bStan = new JButton("Stan konta: ");
        bStan.setBounds(50,50,120,40);
        bStan.addActionListener(this);
       
        bWyjdz = new JButton("Wyjdz");
        add(bStan);
        setLayout(null);
        bWyjdz.setBounds(120, 120, 100, 20);
        add(bWyjdz);
        bWyjdz.addActionListener(this);
        
        bWyplata = new JButton("Wyplac");
        add(bWyplata);
        setLayout(null);
        bWyplata.setBounds(250,120,100,20);
        bWyplata.addActionListener(this);
       
        lSaldo = new JLabel("");
        lSaldo.setBounds(200, 60, 100, 20);
        add(lSaldo);
        
    }
    public static void main(String[] args) {
        MojeOkienko okienko = new MojeOkienko();
        okienko.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okienko.setVisible(true);
        
    }
    @Override
    public void actionPerformed(ActionEvent e)
    {
        Object zrodlo = e.getSource();
        if (zrodlo == bWyplata)
        {
        wyplaty = new Wyplaty(this);
        wyplaty.setVisible(true);
        }
        
        if (zrodlo == bStan)
        {
        lSaldo.setText(String.valueOf(stan +"zł"));
        }
        else if (zrodlo==bWyjdz)
        {
        dispose();
        }
    }

class Wyplaty extends JDialog implements ActionListener
{
	private JLabel lIlosc;
	private JTextField tIlosc;
	private JButton bCancel, bWyplac;
	private boolean WyplacData;
	
	public Wyplaty(JFrame owner)
	{
	 super(owner, "Wyplacanie", true);
	 setSize(500,200);
	 setLayout(null);
	 
	 lIlosc = new JLabel("Ile chcesz wyplacic: ", JLabel.RIGHT);
	 lIlosc.setBounds(0,40,150,20);
	 add(lIlosc);
	 
	 tIlosc = new JTextField();
	 tIlosc.setBounds(150,40,100,20);
	 add(tIlosc);
	 
	 bWyplac = new JButton("Wyplac");
	 bWyplac.setBounds(0,100,100,20);
	 bWyplac.addActionListener(this);
	 add(bWyplac);
	 
	 bCancel = new JButton("Cancel");
	 bCancel.setBounds(120,100,100,20);
	 bCancel.addActionListener(this);
	 add(bCancel);
	 }
	
	public String getUser()
	{
	 return tIlosc.getText();
	}
	
	public boolean isWyplac()
	{
		return WyplacData;
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		
		lSaldo.setText(String.valueOf(ustawNowyStanKonta()) + " zl");
		Object zrodlo = e.getSource();
	 if (zrodlo==bWyplac)
	 {
		
		 WyplacData = true;
	 }
	 else
		 WyplacData = false;
	 setVisible(false);

		 
	 
	 
	}
	public BigDecimal ustawNowyStanKonta() {
	    //sprawdz stan konta
	    BigDecimal stanKonta = stan;
	    if (stanKonta.compareTo(BigDecimal.ZERO) > 0) {
	        //pobierz kwote jaka chcesz wyplacic
	        BigDecimal kwota = new BigDecimal(tIlosc.getText());
	        //porownaj stan z wyplata
	        //funkcja ta sprawdza czy stanKonta jest wiekszy niz kwota jaka chcesz wyplacic
	        if (stanKonta.compareTo(kwota) == 1) {
	            stanKonta = stanKonta.subtract(kwota); //odejmij od stanu konta wyplacana kwote
	        }
	    }
	    return stanKonta;
	}


}
}

Teraz potrzebuje byś mi pomógł, żeby po kliknięciu Cancel (drugi screen wyżej) reagował i zamykał okienko. Probowałem dodawać else if (zrodlo==bCancel) {dispose();} ale nie łapie, masz jakis pomysl? 

komentarz 20 maja 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Spokojnie, każdy kiedyś zaczynał programować :)

probowales czegos takiego?

nazwaPrzycisku.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }});

 

Podobne pytania

+1 głos
2 odpowiedzi 1,032 wizyt
pytanie zadane 27 października 2017 w C i C++ przez miroabyss Nowicjusz (180 p.)
0 głosów
1 odpowiedź 2,119 wizyt
pytanie zadane 1 maja 2017 w Java przez fiszu258 Początkujący (440 p.)
+1 głos
1 odpowiedź 253 wizyt
pytanie zadane 10 kwietnia 2022 w Java przez coriver Nowicjusz (170 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...