Piszę program w swingu łączący się z bazą danych. Mam jedno główne okno w którym między innymi mam tabele w której będą wyświetlane informacje pobierane z bazy oraz JButton'a który powoduje pojawienie się nowego okna w którym tworzę nową bazę danych. Jeże po skompilowaniu kliknę JButtona aby wyświetlił informacje w tabeli z bazy X to to robi, potem klikam JButtona aby dodać nową bazę Y. Podaje nazwe, tworzę baze i wszystko jest ok ale jeżeli jeszcze raz na nowo otworzę program i najpierw utworzę nową bazę Y (dodatkowe okno zostaje zamnkięte) wracam do głównego okna i wtedy chce wyświetlić w tabeli informacje z bazy X to już tego nie robi. Tak samo mam z JComboBox (mimo, że dodaje kolejny element to nie jest on już wyświetlany). Ktoś wie czym to może być spowodowane?
- Rejestracja:ponad 11 lat
- Ostatnio:ponad 11 lat
- Postów:4
public class KelnerProjekt {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
MainFrame mainFrame = new MainFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
}
});
}
}
class MainFrame extends JFrame{
public MainFrame(){
setTitle("Obsługa stolików w Restauracji");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
mainPanel = new JPanel();
mainPanel.setBackground(new Color(142, 148, 208));
title = new JLabel();
title.setFont(new Font("Tempus Sans ITC", 1, 24));
title.setText("Obsługa stolików w Restauracji");
bottomPanel = new JPanel();
addPerson = new JButton("Dodaj kelnera");
choosePersonLabel = new JLabel("Wybór kelnera:");
choosePerson = new JComboBox();
choosePerson.setModel(new DefaultComboBoxModel(new String[] { "Monika", "Jan" }));
choosePerson.setEditable(true);
showTables = new JButton("Pokaż stoliki");
jScrollPane1 = new JScrollPane();
billTable = new JTable();
billTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null},{null, null, null},{null, null, null},{null, null, null},
{null, null, null}
},
new String [] {
"Nazwa Rachunku", "Nr stolika", "Kwota"
}
));
jScrollPane1.setViewportView(billTable);
addPerson.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if(dialog == null)
dialog = new NewPerson(MainFrame.this);
dialog.setVisible(true);
}
});
showTables.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String polaczenieURL = "jdbc:mysql://localhost/test?user=root&password=admin";
//Tworzymy proste zapytanie doa bazy danych
String query = "Select * FROM pracownicy";
Connection conn = null;
try {
//Ustawiamy dane dotyczące podłączenia
conn = DriverManager.getConnection(polaczenieURL);
//Ustawiamy sterownik MySQL
Class.forName("com.mysql.jdbc.Driver");
//Uruchamiamy zapytanie do bazy danych
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
wyswietlDaneZBazy(rs);
}
conn.close();
}
//Wyrzuć wyjątki jężeli nastąpią błędy z podłączeniem do bazy danych lub blędy zapytania o dane
catch(ClassNotFoundException wyjatek) {
System.out.println("Problem ze sterownikiem");
}
catch(SQLException wyjatek) {
//e.printStackTrace();
//System.out.println("Problem z logowaniem\nProsze sprawdzic:\n nazwę użytkownika, hasło, nazwę bazy danych lub adres IP serwera");
System.out.println("SQLException: " + wyjatek.getMessage());
System.out.println("SQLState: " + wyjatek.getSQLState());
System.out.println("VendorError: " + wyjatek.getErrorCode());
}
}
});
GroupLayout bottomPanelLayout = new GroupLayout(bottomPanel);
bottomPanel.setLayout(bottomPanelLayout);
bottomPanelLayout.setHorizontalGroup(
bottomPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(bottomPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(bottomPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
.addComponent(addPerson, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(choosePersonLabel)
.addComponent(choosePerson, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(showTables, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(36, Short.MAX_VALUE))
);
bottomPanelLayout.setVerticalGroup(
bottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(bottomPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(addPerson, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(choosePersonLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(choosePerson, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(showTables)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(285, 285, 285)
.addComponent(title)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(bottomPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 699, Short.MAX_VALUE)))
.addContainerGap())
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(title)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(bottomPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(mainPanelLayout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 60, Short.MAX_VALUE)))
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}
static void wyswietlDaneZBazy(ResultSet rs){
try {
daneZBazy = rs.getString(1);
billTable.setValueAt(daneZBazy, zmiennaPom, 0);
daneZBazy = rs.getString(2);
billTable.setValueAt(daneZBazy, zmiennaPom, 1);
daneZBazy = rs.getString(3);
billTable.setValueAt(daneZBazy, zmiennaPom, 2);
zmiennaPom += 1;
}
catch(SQLException e) {
e.printStackTrace();
}
}
static int zmiennaPom = 0;
static String daneZBazy;
private JButton addPerson;
private JPanel bottomPanel;
public JComboBox choosePerson;
private JLabel choosePersonLabel;
private JScrollPane jScrollPane1;
static private JTable billTable;
public JPanel mainPanel;
private JButton showTables;
private JLabel title;
private NewPerson dialog;
}
class NewPerson extends JDialog {
public NewPerson(JFrame owner){
super(owner, "Dodaj nowego kelnera", true);
addPanel = new JPanel();
addPersonLabel = new JLabel("Podaj nazwe nowego kelnera");
addPersonTextField = new JTextField();
addPerson = new JButton("Dodaj");
addPerson.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nameWaiter = addPersonTextField.getText();
String polaczenieURL = "jdbc:mysql://localhost/test?user=root&password=admin";
//Tworzymy proste zapytanie doa bazy danych
String query = "CREATE TABLE " + nameWaiter + " (Nazwa_Stolika CHAR(20), Nr_stolika INT(3), Kwota DOUBLE(3,2) )";
Connection conn = null;
try {
//Ustawiamy dane dotyczące podłączenia
conn = DriverManager.getConnection(polaczenieURL);
//Ustawiamy sterownik MySQL
Class.forName("com.mysql.jdbc.Driver");
//Uruchamiamy zapytanie do bazy danych
Statement stmt = conn.createStatement();
stmt.executeUpdate(query);
conn.close();
}
//Wyrzuć wyjątki jężeli nastąpią błędy z podłączeniem do bazy danych lub blędy zapytania o dane
catch(ClassNotFoundException wyjatek) {
System.out.println("Problem ze sterownikiem");
}
catch(SQLException wyjatek) {
System.out.println("SQLException: " + wyjatek.getMessage());
System.out.println("SQLState: " + wyjatek.getSQLState());
System.out.println("VendorError: " + wyjatek.getErrorCode());
}
MainFrame obiekt = new MainFrame();
obiekt.choosePerson.add(addPerson);
obiekt.choosePerson.addItem(nameWaiter);
setVisible(false);
}
});
addCancelButton = new JButton("Anuluj");
addCancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
addPersonTextField.setText(null);
setVisible(false);
}
});
javax.swing.GroupLayout addPanelLayout = new javax.swing.GroupLayout(addPanel);
addPanel.setLayout(addPanelLayout);
addPanelLayout.setHorizontalGroup(
addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(addPanelLayout.createSequentialGroup()
.addGroup(addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(addPanelLayout.createSequentialGroup()
.addGap(126, 126, 126)
.addComponent(addPerson)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(addCancelButton))
.addGroup(addPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(addPersonLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(addPersonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(34, Short.MAX_VALUE))
);
addPanelLayout.setVerticalGroup(
addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, addPanelLayout.createSequentialGroup()
.addContainerGap(60, Short.MAX_VALUE)
.addGroup(addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addPersonLabel)
.addComponent(addPersonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(29, 29, 29)
.addGroup(addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addPerson)
.addComponent(addCancelButton))
.addGap(58, 58, 58))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(addPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(addPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setSize(450,200);
setResizable(false);
setLocationRelativeTo(null);
}
private JPanel addPanel;
private JButton addCancelButton;
private JButton addPerson;
private JLabel addPersonLabel;
private JTextField addPersonTextField;
private String nameWaiter;
}

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Nie analizowałem całości, przy dodawaniu kelnera błąd jest w pierwszym wierszu poniżej:
MainFrame obiekt = new MainFrame();
obiekt.choosePerson.add(addPerson);
obiekt.choosePerson.addItem(nameWaiter);
setVisible(false);
Ty tworzysz nowe okno (które nie jest wyświetlane), i w tym nowym oknie dodajesz kelnera.
- Rejestracja:ponad 11 lat
- Ostatnio:ponad 11 lat
- Postów:4
na pewno jest źle? Pierwsza klasa jest od głównego okna, druga klasa wyświetla dodatkowe okno w którym podaje nazwę kelnera. setVisible(false) jest dlatego żeby po kliknięciu przycisku "Dodaj" JFrame ma zniknąć i zostaje tylko okno główne. Tą drugą linijkę zapomniałem usunąć. Miało być tak:
MainFrame obiekt = new MainFrame();
obiekt.choosePerson.addItem(nameWaiter);
setVisible(false);
Aby dodać element do JComboBox z klasy pierwszej (głównego okna) muszę utworzyć obiekt i potem w drugiej linijce chce dodać wartość nameWaiter do tego JComboBox i po tych operacjach okno znika. Przy działaniu żadne błędy mi nie wyskakują tylko jakby widok głównego okna się nie chce uaktualnić
- Rejestracja:ponad 11 lat
- Ostatnio:ponad 11 lat
- Postów:6
Jak już się uwiniesz żeby odnieść się do poprzedniej porady to zostanie jeszcze bug z niezerowaniem zmiennej static int zmiennaPom = 0
która w tym wypadku wydaje się że powinna być zmienną lokalną. Oraz prawdopodobnie wywołanie metody powiadamiającej JTable że jej model został zmieniony, np. wywołując na obiekcie modelu metodę fireTableDataChanged()

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Na pewno jest źle. W tym wierszu
MainFrame obiekt = new MainFrame();
tworzysz nowe okno typu MainFrame.
Masz zatem w programie dwa główne okna, pierwsze z nich utworzyłeś tu
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
MainFrame mainFrame = new MainFrame();
W tym oknie musisz dodać nowego kelnera.

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Definicja klasy NewPerson winna wyglądać tak:
class NewPerson extends JDialog {
private MainFrame owner = null;
public NewPerson(MainFrame owner){
super(owner, "Dodaj nowego kelnera", true);
this.owner = owner;
...
NewPerson.this.owner.choosePerson.add(addPerson);
NewPerson.this.owner.choosePerson.addItem(nameWaiter);
setVisible(false);
...
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.