• 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

Object Storage Arubacloud
0 głosów
127 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ź 482 wizyt
+1 głos
1 odpowiedź 336 wizyt
pytanie zadane 28 listopada 2020 w C i C++ przez oscarzasty Nowicjusz (220 p.)
0 głosów
1 odpowiedź 92 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez Whiskey_Taster Pasjonat (15,610 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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!

...