Wyświetlanie losowego wyniku w polu tekstowym

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));
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]); 
    }
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 ));

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.

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