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?
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
klasa Ksiazka
public class Ksiazka {
private String idKsiazki;
private String tytul;
private String autor;
private String opis;
public Ksiazka(String idKsiazki, String tytul, String autor, String opis) {
this.idKsiazki = idKsiazki;
this.tytul = tytul;
this.autor = autor;
this.opis = opis;
}
public String getIdKsiazki() {
return idKsiazki;
}
public void setIdKsiazki(String idKsiazki) {
this.idKsiazki = idKsiazki;
}
public String getTytul() {
return tytul;
}
public void setTytul(String tytul) {
this.tytul = tytul;
}
public String getAutor() {
return autor;
}
public String getOpis() {
return opis;
}
public void setOpis(String opis) {
this.opis = opis;
}
public void setAutor(String autor) {
this.autor = autor;
}
}
klasa biblioteka
import java.util.HashMap;
import java.util.Map;
public class Biblioteka {
Map<String, Ksiazka> ksiazki = new HashMap<>();
public int dodajKsiazke(String idKsiazki, String tytul, String autor, String opis){
Ksiazka nowaKsiazka = new Ksiazka(idKsiazki, tytul, autor, opis);
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!");
}
}
przycisk dodaj
private void dodajMouseClicked(java.awt.event.MouseEvent evt) {
String idKsiazki = tfIDKsiazki.getText();
String tytul = tfTytul.getText();
String autor = tfAutor.getText();
String opis = tfOpis.getText();
Biblioteka usluga = new Biblioteka();
usluga.dodajKsiazke(idKsiazki, tytul, autor, opis);
System.out.println(idKsiazki + tytul + autor + opis);
JOptionPane.showMessageDialog(null, "Dodano książkę!");
System.out.println(usluga.ksiazki.values());
this.dispose();
}
przycisk pobierz
private void dodajMouseClicked(java.awt.event.MouseEvent evt) {
String idKsiazki = tfIDKsiazki.getText();
String tytul = tfTytul.getText();
String autor = tfAutor.getText();
String opis = tfOpis.getText();
Biblioteka usluga = new Biblioteka();
usluga.dodajKsiazke(idKsiazki, tytul, autor, opis);
System.out.println(idKsiazki + tytul + autor + opis);
JOptionPane.showMessageDialog(null, "Dodano książkę!");
this.dispose();
}
Do przycisków są 2 osobne klasy ale nie wstawiam ich całych ponieważ projekt jest w netBeans więc okienka tworzyłam w jFrame automatycznie i więcej kodu w nich nie pisałam.
Wykonując Biblioteka usluga = new Biblioteka(); dla obu przycisków tworzy mi się nowa mapa i nie zapisują mi się dodane nowe książki. Jak mam dostać się do tej mapy z różnych klas tak by nie tracić danych w niej zapisanych?
- Rejestracja:około 6 lat
- Ostatnio:około 22 godziny
- Postów:1002
- Wrzuciłes dwa razy tą samą metodę.
- Za każdym razem tworzy Ci się nowa mapa, bo tworzysz kilkukrotnie instancje klasy Biblioteka, a do niej właśnie jest przypisana twoja mapa.
Zmień swój kod tak, aby w metodach odpalanych po naciśnięciu buttonu nie tworzyć za każdym razem instancji klasy biblioteka.
Stwórz bibliotekę raz, po starcie programu, a następnie przekazuj ten obiekt do innych metod jako argument.
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
Utworzyłam nową klasę
public class BibliotekaRun {
public static void main(String[] args) {
Biblioteka usluga = new Biblioteka();
GlowneMenuOkienko menuOkienko = new GlowneMenuOkienko();
menuOkienko.setVisible(true);
}
}
tworze w niej instancje klasy Biblioteka i uruchamiam główne okienko.
Następnie w klasie z przyciskiem dodaj odwołałam się do tej klasy w taki sposób:
private BibliotekaRun run;
a w metodzie obsługującej przycisk, żeby dostać się do metody dodajKsiazke zrobiłam tak:
private void dodajMouseClicked(java.awt.event.MouseEvent evt) {
//BibliotekaUsluga usluga = new BibliotekaUsluga();
String idK = tfIDKsiazki.getText();
String tytul = tfTytul.getText();
String autor = tfAutor.getText();
String opis = tfOpis.getText();
run.usluga.dodajKsiazke(idK, tytul, autor, opis);
JOptionPane.showMessageDialog(null, "Dodano książkę!");
this.dispose();
}
A po uruchomieniu programu, wpisaniu danych w pola tekstowe i naciśnięciu przycisku wyskakuje mi taki oto błąd:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Co robię źle? Jak inaczej mam się dostać do metody dodajKsiazke żeby nie tworzyć nowych instancji klasy?
- Rejestracja:około 6 lat
- Ostatnio:około 7 godzin
- Postów:142
Każdemu tworzonemu okienku/formie przekazuj bibliotekę jako parametr
Biblioteka usluga = new Biblioteka();
GlowneMenuOkienko menuOkienko = new GlowneMenuOkienko( biblioteka );
Każdy konstruktor może ją zapamiętywać w this.cośtam
, gdzie będzie dostępna dla obsługi zdarzeń, albo używaj ją bezpośrednio przy definiowaniu handlerów zdarzeń (może być potrzebne final
).
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
public class BibliotekaRun {
public static void main(String[] args) {
Biblioteka usluga = new Biblioteka();
GlowneMenuOkienko menuOkienko = new GlowneMenuOkienko(usluga);
menuOkienko.setVisible(true);
}
}
Biblioteka usluga;
public GlowneMenuOkienko(Biblioteka usluga) {
initComponents();
this.usluga = usluga;
}
public static void main(String args[]) {
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);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GlowneMenuOkienko(usluga).setVisible(true);
}
});
}
Gdy chce przekazywać Bibliotekę jako parametr, tworze odpowiednie pole w konstruktorze ale w metodzie run gdy jako parametr podaje tak jak jest teraz usluga, to wyskakuje mi błąd że usluga jest nie statyczna. Co zrobić w takim przypadku?
- Rejestracja:około 6 lat
- Ostatnio:około 7 godzin
- Postów:142
main
jest funkcją statyczną, więc nie ma this
i z niej nie można się dostać do niestatycznych zmiennych. obiekt Biblioteka może być utworzony tuż przed utworzeniem GlowneMenuOkienko
tak , jak w mojej poprzedniej odpowiedzi.
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Biblioteka usluga = new Biblioteka();
new GlowneMenuOkienko(usluga).setVisible(true);
}
});
Osobiście wydzieliłbym ten kod do osobnej funkcji np. StartAplikacji
dzięki czemu nie będzie trzeba grzebać w dość długiej funkcji main
.
private static void StartAplikacji() {
Biblioteka usluga = new Biblioteka();
new GlowneMenuOkienko(usluga).setVisible(true);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
StartAplikacji();
}
});
Jeśli GlowneMenuOkienko istnieje przez cały czas działania programu, to bibliotekę możesz też utworzyć w jego konstruktorze. Dalej bibliotekę przekazujesz ewentualnym innym oknom przez parametr.
A jeśli jako parametr miałaby być przekazywana BibliotekaRun
, to trzeba utworzyć w main
jej instancję przez new
.
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
Dodałam funkcję StartAplikacji
do klasy GlowneMenuOkienko
i gdy chcę w tej klasie przekazać Bibliotekę przez parametr to w klasie DodajKsiazkeOkienko
muszę ją dodać do konstruktora ale znowu przy metodzie run
wyskakuje błąd że nie jest statyczne.
Biblioteka usluga;
public GlowneMenuOkienko(Biblioteka usluga) {
initComponents();
this.usluga = usluga;
}
private static void StartAplikacji() {
Biblioteka usluga = new Biblioteka();
new GlowneMenuOkienko(usluga).setVisible(true);
}
private void dodajKsiazkeMouseClicked(java.awt.event.MouseEvent evt) {
DodajKsiazkeOkienko dodajKsiazke = new DodajKsiazkeOkienko(usluga);
dodajKsiazke.setVisible(true);
}
Tak wygląda kod w GlowneMenuOkienko
i gdy usługa jest przekazana jako parametr w metodzie dodajKsiazkeMouseClicked
to ciągle ten sam błąd się pojawia.
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
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.
- Rejestracja:około 6 lat
- Ostatnio:około 22 godziny
- Postów:1002
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.
- Rejestracja:około 6 lat
- Ostatnio:około 7 godzin
- Postów:142
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.
}
});
- Rejestracja:prawie 6 lat
- Ostatnio:prawie 6 lat
- Postów:14
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
- Rejestracja:około 6 lat
- Ostatnio:około 22 godziny
- Postów:1002
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.