Wyświetlanie losowego wyniku w polu tekstowym

Odpowiedz Nowy wątek
2018-12-18 14:36
0

Witam :)

Jestem zupełnie początkujący jeżeli chodzi o programowanie. Od kilku tygodniu uczę się Javy (mój prierszwy kontakt z programowaniem), więc proszę o w miarę łopatologiczne wyjaśnienie problemu ;)

Chciałbym napisać prosty program który symuluje rzut dwoma kośćmi sześciennymi, z tym, że zamiast wyniku liczbowego ma wyświetlać krótki opis. Po prostu każdej ściance kości jest przypisana konkretna czynność - jest mi to potrzebne do gry karcianej do której zaginęły mi oryginalne kostki.

Poniżej zamieszczam kod, który stworzyłem. Na chwilę obecną działa to tak, że w polach tekstowych zamiast opisu wyświetlane są liczby. Natomiast same opisy są wyświetlane tylko w konsoli.

package _grafika;

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Kostka extends JFrame implements ActionListener
{

    private JLabel lKosc1, lKosc2;
    private JTextField tfKosc1, tfKosc2;
    private JButton bRzut, bWyjscie;

    public Kostka()
    {
        setSize(340, 220);
        setTitle("Race for the Galaxy: Gathering Storm");
        setLayout(null);

        lKosc1 = new JLabel("Kość 1:");
        lKosc1.setBounds(20, 40, 80, 20);
        add(lKosc1);

        lKosc2 = new JLabel("Kość 2:");
        lKosc2.setBounds(20, 80, 80, 20);
        add(lKosc2);

        tfKosc1 = new JTextField();
        tfKosc1.setBounds(100, 40, 180, 20);
        tfKosc1.setEditable(false);
        add(tfKosc1);

        tfKosc2 = new JTextField();
        tfKosc2.setBounds(100, 80, 180, 20);
        tfKosc2.setEditable(false);
        add(tfKosc2);

        bRzut = new JButton("Rzut");
        bRzut.setBounds(20, 120, 120, 20);
        add(bRzut);
        bRzut.addActionListener(this);

        bWyjscie = new JButton("Wyjście");
        bWyjscie.setBounds(160, 120, 120, 20);
        add(bWyjscie);
        bWyjscie.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e)
    {
        Object zrodlo = e.getSource();
        if (zrodlo == bWyjscie)
        {
            dispose();
        }

        else if (zrodlo == bRzut)
        {
            Double rzut1 = new Double(Math.round(Math.random() * 5 + 1));
            Double wynik1 = rzut1;
            if (wynik1 == 1)
            {
                System.out.println("Kopia");
            } else if (wynik1 == 2)
            {
                System.out.println("Konsumpcja x2");
            } else if (wynik1 == 3)
            {
                System.out.println("Akcja");
            } else if (wynik1 == 4)
            {
                System.out.println("Sprzedaż");
            } else if (wynik1 == 5)
            {
                System.out.println("Produkcja");
            } else if (wynik1 == 6)
            {
                System.out.println("Kopia");
            }

            Double rzut2 = new Double(Math.round(Math.random() * 5 + 1));
            Double wynik2 = rzut2;
            if (wynik2 == 1)
            {
                System.out.println("Kopia");
            } else if (wynik2 == 2)
            {
                System.out.println("Osadnictwo");
            } else if (wynik2 == 3)
            {
                System.out.println("Rozwój");
            } else if (wynik2 == 4)
            {
                System.out.println("Poszukiwanie");
            } else if (wynik2 == 5)
            {
                System.out.println("Kopia");
            } else if (wynik2 == 6)
            {
                System.out.println("Rozwój");
            }

            tfKosc1.setText(String.valueOf(wynik1));
            tfKosc2.setText(String.valueOf(wynik2));

        }

    }

    public static void main(String[] args)
    {
        Kostka aplikacja = new Kostka();
        aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        aplikacja.setVisible(true);

    }

}

I tu pytanie - jak zrobić, żeby w polach tekstowych były wyświetlana opisy? Zakładam, że błąd tkwi w tych linijkach:

tfKosc1.setText(String.valueOf(wynik1));
tfKosc2.setText(String.valueOf(wynik2));
edytowany 1x, ostatnio: darksavant, 2018-12-18 14:47
Rób wcięcia w kodzie, tego co zamieściłeś nie można czytać. - bogdans 2018-12-18 14:41

Pozostało 580 znaków

2018-12-18 15:00
1

Drugą tablicę opcji napisz sobie sam.

...
    private JLabel lKosc1, lKosc2;
    private JTextField tfKosc1, tfKosc2;
    private JButton bRzut, bWyjscie;
    private String[] options = {"Kopia", "Konsumpcja x2", "Akcja", "Sprzedaż", "Produkcja", "Kopia"};
    private Random random = new Random();
...
    bRzut = new JButton("Rzut");
    bRzut.setBounds(20, 120, 120, 20);
    add(bRzut);
    bRzut.addActionListener(e -> draw());

    bWyjscie = new JButton("Wyjście");
    bWyjscie.setBounds(160, 120, 120, 20);
    add(bWyjscie);
    bWyjscie.addActionListener(e -> dispose());
...
    private void draw()
    {
        int wynik = random.nextInt(options.length);
        tfKosc1.setText(options[wynik]); 
        wynik = random.nextInt(options.length);
        tfKosc2.setText(options[wynik]); 
    }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2018-12-19 05:39

Pozostało 580 znaków

2018-12-18 15:04
1

Dobrze zakładasz, jako tekst w kontrolce ustawiasz wartość liczbową zamiast tekstu. Możesz sobie np. utworzyć zmienną typu tekstowego i w ifie przypisywać wartość do niej i później wyświetlać w graficznym inerfejsie.


string result = "";
.
.
.
else if (wynik2 == 6)
{
    result = "Rozwój";
    System.out.println(result );
}

tfKosc1.setText(String.valueOf(result ));
edytowany 5x, ostatnio: Progress, 2018-12-18 15:07

Pozostało 580 znaków

2018-12-18 15:54
0

Dziękuję Panowie - zakładam, że płeć męska ;) za szybką odpowiedź.
bogdans - teraz działa jak należy
Progress - niestety efekt dalej był taki sam.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0