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

Java - aplikacja okienkowa a odswiezanie i kompilacja do pliku jar

0 głosów
246 wizyt
pytanie zadane 29 marca 2022 w Java przez coriver Nowicjusz (170 p.)

Hej, dwa pytania odnośnie Javy. Napisałem prosty program symulujący rzut kością prezentującym wyniki rzutu na ekranie w formie graficznej.  Klasa Panel1 extends JPanel oraz klasa GraWKosci tworzące ramke, dodajace do niej komponenty, z możliwością wyboru iloma kostkami chcemy rzucać.

Po wielu próbach działa, ale po zmianie ilości kostek aplikacja nie odświeża się automatycznie, muszę kliknąć drugi raz na pole wyboru lub np. rozszerzyć okno aby program wygenerował nową ilość kostek (bez tego ramka pozostaje pusta), wiec pierwsze pytanie dotyczy tego, jak mogę to rozwiązać, ewentualnie dlaczego nie mogę? :)

 

Druga sprawa dotyczy skompilowania tego do pliku jar, po wygenerowaniu przez kompilator plikow class i próbie dodania ich do archiwum JAR komenda " -jar cvmf manifest.txt aplk.jar GraWKosci.class " kompilator wyświetla added manifest
adding: GraWKosci.class(in = 3309) (out= 1825)(deflated 44%), a sam plik nie uruchamia aplikacji.

Z góry dziękuję, za odpowiedź, poniżej wklejam kody napisanych klas:


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class GraWKosci {

    JFrame ramka;
    JPanel panelGlowny;
    JPanel wyniki;

    JTextField wynik;
    JTextField wynik2;
    JTextField wynik3;
    ArrayList<Panel1> lista = new ArrayList<Panel1>();
    ArrayList<JTextField> wynikLista = new ArrayList<JTextField>();

    public static void main(String[] args) {
        new GraWKosci().tworzGUI();

    }

    public void tworzGUI() {
        ramka = new JFrame("Gra w kości");
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String[] obiekty = new String[3];
        for (int i = 0; i < 3; i++) {
            obiekty[i] = ("Rzuć " + (i + 1) + " kośćmi");
        }

        JPanel panelWyb = new JPanel(new FlowLayout());
        JComboBox wybor = new JComboBox(obiekty);
        panelWyb.add(new Label("Ile kości"));
        panelWyb.add(wybor);
        wybor.addActionListener(new Lista());
        ramka.getContentPane().add(BorderLayout.NORTH, panelWyb);


        ramka.setSize(450, 200);
        ramka.setVisible(true);

        JPanel dol = new JPanel();
        BorderLayout layout = new BorderLayout();
        dol.setLayout(layout);

        JButton przycisk = new JButton("Losuj");
        dol.add(BorderLayout.SOUTH, przycisk);

        wyniki = new JPanel();
        wyniki.setLayout(new BoxLayout(wyniki, BoxLayout.X_AXIS));
        wyniki.add(new Label("Poprzednie rzuty:"));


        wynik = new JTextField();
        wynikLista.add(wynik);
        wyniki.add(wynik);
        wynik.setEditable(false);

        wynik2 = new JTextField();
        wynikLista.add(wynik2);
        wyniki.add(wynik2);
        wynik2.setEditable(false);

        wynik3 = new JTextField();
        wynikLista.add(wynik3);
        wyniki.add(wynik3);
        wynik3.setEditable(false);

        wyniki.add(wynik);
        wyniki.add(wynik2);
        wyniki.add(wynik3);


        ramka.getContentPane().add(BorderLayout.SOUTH, dol);
        dol.add(BorderLayout.NORTH, wyniki);

        przycisk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ramka.repaint();
                int ile = lista.size();
                if (ile >= 1) {
                    int tekst1 = lista.get(0).ile();
                    wynik.setText(" " + tekst1);
                }
                if (ile >= 2) {
                    int tekst2 = lista.get(1).ile();
                    wynik2.setText(" " + tekst2);
                }

                if (ile >= 3) {
                    int tekst3 = lista.get(2).ile();
                    wynik3.setText(" " + tekst3);
                }

            }


        });
        panelGlowny = new JPanel();
        ramka.getContentPane().add(BorderLayout.CENTER, panelGlowny);

    }

    public void tworzGUI4(int ilosc) {

        panelGlowny = new JPanel();
        panelGlowny.setLayout(new BoxLayout(panelGlowny, BoxLayout.X_AXIS));

        for (int i = 0; i <= ilosc && i < 3; i++) {
            Panel1 panel = new Panel1();
            lista.add(panel);
            panelGlowny.add(panel);
        }

        ramka.getContentPane().add(BorderLayout.CENTER, panelGlowny);
    }

        public class Lista implements ActionListener {


            @Override
            public void actionPerformed(ActionEvent e) {

                ramka.remove(panelGlowny);
                lista.removeAll(lista);
                wynikLista.removeAll(wynikLista);
                JComboBox cb = (JComboBox) e.getSource();
                int ilosc = cb.getSelectedIndex();
                tworzGUI4(ilosc);
                ramka.repaint();
                wynik.setText(null);
                wynik2.setText(null);
                wynik3.setText(null);


            }
        }
    }


import javax.swing.*;
import java.awt.*;

public class Panel1 extends JPanel {

    int losowy2;

    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;


        g2d.setColor(Color.BLACK);
        g2d.fillRect(10, 10, 50, 50);

        int losowy = (int) (Math.random() * 6 + 1);
        losowy2 = losowy;
        g2d.setColor(Color.BLUE);
        int x = 10;
        int y = 10;

        for (int i = 0; (i<losowy) & (i<3); i++) {
            g2d.fillOval(x, y, 10, 10);
            x += 20;
        }
        if (losowy > 3) {
            x = 10;
            y += 30;

            for (int i = 0; i < losowy - 3; i++) {
                g2d.fillOval(x, y, 10, 10);
                x += 20;
            }
        }
    }
    public int ile(){
        return losowy2;
    }
}


 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 872 wizyt
+1 głos
1 odpowiedź 595 wizyt
pytanie zadane 28 listopada 2020 w C i C++ przez oscarzasty Nowicjusz (220 p.)
0 głosów
1 odpowiedź 229 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez Whiskey_Taster Pasjonat (15,610 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,325 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...