Prosta aplikacja dla biblioteki

Odpowiedz Nowy wątek
2019-05-13 14:11
0

Witam, chciałam stworzyć prostą aplikację okienkowa dla biblioteki. Stworzyłam klasę książka, w której znajdują się następujące atrybuty: id, tytuł, autor, opis. Następnie utworzyłam klasę biblioteka, w której stworzyłam mapę <String, Ksiazka>, założyłam że id jest Stringiem, oraz ustawiłam je jako wartość dla klucza. Utworzyłam też w tej klasie metody do dodawania książki i wyświetlania książki. Utworzyłam też klasy dodajKsiazke oraz pobierzKsiazke w których znajduje się implementacja okienek. Dodawanie książek do mapy działa, niestety mam problem z ich pobraniem, ponieważ mimo iż wpisuję poprawne id wyskakuje mi, że nie ma książki z takim id. Czy powodem tego może być że w klasie dodajKsiążke i pobierzKsiazke odwołuję się do klasy Biblioteka, w której stworzona jest mapa? A jeśli nie to co może być powodem że nie widzi mi danych zapisanych w mapie?

Wrzuć na pastebin swój kod - kixe52 2019-05-13 14:13

Pozostało 580 znaków

2019-05-15 21:03
0

Możesz wkleić cały kod, bo coś nie mogę się odnaleźć w tych kawałkach.

Pozostało 580 znaków

2019-05-15 21:13
0

GlowneMenuOkienko

public class GlowneMenuOkienko extends javax.swing.JFrame {

    /**
     * Creates new form GlowneMenuOkienko
     */

    Biblioteka usluga;

    public GlowneMenuOkienko(Biblioteka usluga) {
        initComponents();
        this.usluga = usluga;
    }

        private static void StartAplikacji() {
            Biblioteka usluga = new Biblioteka();
            new GlowneMenuOkienko(usluga).setVisible(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        dodajKsiazke = new javax.swing.JButton();
        pobierzKsiazke = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        dodajKsiazke.setText("Dodaj książkę");
        dodajKsiazke.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                dodajKsiazkeMouseClicked(evt);
            }
        });

        pobierzKsiazke.setText("Pobierz książkę");
        pobierzKsiazke.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                pobierzKsiazkeMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(147, 147, 147)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(pobierzKsiazke)
                    .addComponent(dodajKsiazke))
                .addContainerGap(148, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(34, 34, 34)
                .addComponent(dodajKsiazke)
                .addGap(18, 18, 18)
                .addComponent(pobierzKsiazke)
                .addContainerGap(202, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void dodajKsiazkeMouseClicked(java.awt.event.MouseEvent evt) {                                          
        DodajKsiazkeOkienko dodajKsiazke = new DodajKsiazkeOkienko(usluga);
        dodajKsiazke.setVisible(true);  
    }                                         

    private void pobierzKsiazkeMouseClicked(java.awt.event.MouseEvent evt) {                                            
        PobierzKsiazkeOkienko pobierzKsiazke = new PobierzKsiazkeOkienko();
        pobierzKsiazke.setVisible(true);
    }                                           

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(GlowneMenuOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(GlowneMenuOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(GlowneMenuOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(GlowneMenuOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {

                StartAplikacji();
            }
        });

    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton dodajKsiazke;
    private javax.swing.JButton pobierzKsiazke;
    // End of variables declaration                   
}

DodajKsiazkeOkienko

    private Biblioteka usluga;
    public DodajKsiazkeOkienko() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jDesktopPane1 = new javax.swing.JDesktopPane();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        tfTytul = new javax.swing.JTextField();
        tfAutor = new javax.swing.JTextField();
        tfOpis = new javax.swing.JTextField();
        dodaj = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        tfIDKsiazki = new javax.swing.JTextField();

        jButton1.setText("jButton1");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jDesktopPane1Layout = new javax.swing.GroupLayout(jDesktopPane1);
        jDesktopPane1.setLayout(jDesktopPane1Layout);
        jDesktopPane1Layout.setHorizontalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jDesktopPane1Layout.setVerticalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Tytuł");

        jLabel2.setText("Autor");

        jLabel3.setText("Opis");

        dodaj.setText("Dodaj książkę");
        dodaj.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                dodajMouseClicked(evt);
            }
        });

        jLabel4.setText("ID Książki");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel1)
                            .addComponent(jLabel4))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(tfTytul)
                            .addComponent(tfAutor)
                            .addComponent(tfOpis, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
                            .addComponent(tfIDKsiazki)))
                    .addComponent(dodaj))
                .addContainerGap(47, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(17, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(tfIDKsiazki, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(tfTytul, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(tfAutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(tfOpis, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(34, 34, 34)
                .addComponent(dodaj)
                .addGap(60, 60, 60))
        );

        pack();
    }// </editor-fold>                        

    private void dodajMouseClicked(java.awt.event.MouseEvent evt) {                                   

        String idK = tfIDKsiazki.getText();
        String tytul = tfTytul.getText();
        String autor = tfAutor.getText();
        String opis = tfOpis.getText();

       usluga.dodajKsiazke(idK, tytul, autor, opis);

        JOptionPane.showMessageDialog(null, "Dodano książkę!");
        //System.out.println(usluga.ksiazki.keySet());
            this.dispose();

    }                                  

    /**
     * @param args the command line arguments
     */

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(DodajKsiazkeOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(DodajKsiazkeOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(DodajKsiazkeOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(DodajKsiazkeOkienko.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {

                new DodajKsiazkeOkienko().setVisible(true);
            }
        });

    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton dodaj;
    private javax.swing.JButton jButton1;
    private javax.swing.JDesktopPane jDesktopPane1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField tfAutor;
    private javax.swing.JTextField tfIDKsiazki;
    private javax.swing.JTextField tfOpis;
    private javax.swing.JTextField tfTytul;
    // End of variables declaration                   
}

Biblioteka

public class Biblioteka{

   Map<String, Ksiazka> ksiazki;

    public Biblioteka() {
        this.ksiazki = new HashMap<>();
    }

    public void setKsiazki(Map<String, Ksiazka> ksiazki) {
        this.ksiazki = ksiazki;
    }

    public int dodajKsiazke(String idKsiazki, String tytul, String autor, String opis){

        Ksiazka nowaKsiazka = new Ksiazka(idKsiazki, tytul, autor, opis);
        this.ksiazki.put(idKsiazki, nowaKsiazka);
        return ksiazki.size();

    }

    public Ksiazka pobierzKsiazke(String idKsiazki) throws Exception{

        if(ksiazki.containsKey(idKsiazki))
        return ksiazki.get(idKsiazki);
        else throw new Exception("Nie ma takiej książki!");

    }
}

Jest jeszcze klasa Ksiazka a w niej jest tylko odpowiedni konstruktor oraz gettery i settery.

Pozostało 580 znaków

2019-05-15 21:26
1

Jesteś pewna, że błąd mówi tylko o statyczności? Na szybko rzuciłem okiem i pierwsze co mi wpadło to:

private void dodajKsiazkeMouseClicked(java.awt.event.MouseEvent evt) {                                          
        DodajKsiazkeOkienko dodajKsiazke = new DodajKsiazkeOkienko(usluga);
        dodajKsiazke.setVisible(true);  
    }

inicjalizujesz obiekt używając konstruktor jednoargumentowy, gdzie w klasie DodajKsiazkeOkienko nie masz konstruktora przyjmującego obiekt Biblioteka.

Pozostało 580 znaków

2019-05-15 21:32
1

W klasie DodajKsiazkeOkienko nie potrzebujesz funkcji main chyba, że planujesz ją uruchamiać osobno, bez głównego okna. W takim przypadku ktoś musi utworzyć obiekt Biblioteka.

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Biblioteka usluga = new Biblioteka();
                new DodajKsiazkeOkienko(usluga).setVisible(true);
                // Pojawi okno DodajKsiążkę, ale nie będzie okna głównego.
            }
        });
edytowany 1x, ostatnio: -daniel-, 2019-05-15 21:39

Pozostało 580 znaków

2019-05-15 21:42
0

Tak, błąd dotyczył tylko statyczności ponieważ konstruktor utworzyłam ale potem zmieniałam w kodzie i o nim zapomniałam.
Faktycznie metoda main nie jest potrzebna ponieważ okienko otwiera się poprzez inną metodę. W netBeans tworzą się te metody automatycznie i nie zwróciłam na to uwagi. To rozwiązuje mój problem. Temat można zamknąć. Dziękuję wszystkim za pomoc oraz cierpliwe odpowiedzi na moje pytania :D

Pozostało 580 znaków

2019-05-15 21:44
0

Dodam jeszcze jedno. Jak już się bawisz w tworzenie aplikacji, poczytaj o dodawaniu baz danych do aplikacji. Znajomość tego na pewno CI się przyda. Dzięki czemu zamiast przechowywać stworzone książki w mapie, będziesz mogła je pobierać z / zapisywać do bazy danych. Zapewnia Ci to nie zerowanie twoich książek po restarcie apki.

edytowany 1x, ostatnio: kixe52, 2019-05-15 21:45

Pozostało 580 znaków

2019-05-15 21:47
0

Czytałam co nieco o tym, ale na razie chcę stworzyć prostą aplikację. W późniejszym czasie jak będę ją rozwijać to na pewno wykorzystam bazę danych.

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