Windowbuilder Eclipse - problem ze zmiana zawartosci tabeli

0

Witam wszystkich,

mam mały problem z aplikacją, którą pisze.
Zrobiłem już GUI (za pomocą window builder) przy czym nie wszystko działa tak, jak powinno.

Ale najpierw kod:


package gui;

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import klasy_Zwykle.Klient;
import bazaDanych.KlientDB;

public class a {

	private JFrame frame;

	DefaultTableModel model = new DefaultTableModel(new Object[] [] {}, new String[] {"Id", "Imie", "Nazwisko", "Adres", "Pesel", "Nr konta", "Id firmy", "Rabat", "Adres Email"});
	
	Klient k = new Klient();
	KlientDB kl = new KlientDB();
	
	 JTextField txtId;
	 JTextField txtImie;
	 JTextField txtNazwisko;
	 JTextField txtAdres;
	 JTextField txtPesel;
	 JTextField txtIdfirmy;
	 JTextField txtRabat;
	 JTextField txtAdresmailowy;
	 JTextField txtNr_bankowy;
	JButton bAdd, bSave, bDelete, bSearch;
	 JTable table;
	
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					a a = new a();
				//	a.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					a.frame.setLocationByPlatform(true);
					a.frame.pack();
					a.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}


	public a() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new GridLayout(0, 1, 0, 0));
		
		JPanel panel = new JPanel();
		frame.getContentPane().add(panel);
		
		JLabel lbId = new JLabel("Id");
		panel.add(lbId);
		
		txtId = new JTextField();
		panel.add(txtId);
		txtId.setColumns(10);
		
		JLabel lbImie = new JLabel("Imie");
		panel.add(lbImie);
		
		txtImie = new JTextField();
		panel.add(txtImie);
		txtImie.setColumns(10);
		
		JLabel lbNazwisko = new JLabel("Nazwisko");
		panel.add(lbNazwisko);
		
		txtNazwisko = new JTextField();
		panel.add(txtNazwisko);
		txtNazwisko.setColumns(10);
		
		JLabel lbAdres = new JLabel("Adres");
		panel.add(lbAdres);
		
		txtAdres = new JTextField();
		panel.add(txtAdres);
		txtAdres.setColumns(10);
		
		JLabel lbPesel = new JLabel("Pesel");
		panel.add(lbPesel);
		
		txtPesel = new JTextField();
		panel.add(txtPesel);
		txtPesel.setColumns(10);
		
		JLabel lbIdfirmy = new JLabel("Idfirmy");
		panel.add(lbIdfirmy);
		
		txtIdfirmy = new JTextField();
		panel.add(txtIdfirmy);
		txtIdfirmy.setColumns(10);
		
		JLabel lbNr_bankowy = new JLabel("Nr bankwoy");
		panel.add(lbNr_bankowy);
		
		txtNr_bankowy = new JTextField();
		panel.add(txtNr_bankowy);
		txtNr_bankowy.setColumns(10);
		
		JLabel lbRabat = new JLabel("Rabat");
		panel.add(lbRabat);
		
		txtRabat = new JTextField();
		panel.add(txtRabat);
		txtRabat.setColumns(10);
		
		JLabel lbAdresmailowy = new JLabel("Adresmailowy");
		panel.add(lbAdresmailowy);
		
		txtAdresmailowy = new JTextField();
		panel.add(txtAdresmailowy);
		txtAdresmailowy.setColumns(10);
		
		JButton bAdd = new JButton("Add");
		panel.add(bAdd);
		
		JButton bSave = new JButton("Save");
		panel.add(bSave);
		
		JButton bDelete = new JButton("Delete");
		panel.add(bDelete);
		
		JButton bSearch = new JButton("Search");
		panel.add(bSearch);
		
		table = new JTable();
		frame.getContentPane().add(table);
		
		
		
		table.setModel(model);
		refresh();
		AddEvents();
		
	}
	
	public void AddEvents(){
		table.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				int selRow = table.getSelectedRow();
				txtId.setText("" + table.getValueAt(selRow, 0));
				txtImie.setText("" + table.getValueAt(selRow, 1));
				txtNazwisko.setText("" + table.getValueAt(selRow, 2));
				txtAdres.setText("" + table.getValueAt(selRow, 3));
				txtPesel.setText("" + table.getValueAt(selRow, 4));
				txtNr_bankowy.setText("" + table.getValueAt(selRow, 5));
				txtIdfirmy.setText("" + table.getValueAt(selRow, 6));
				txtRabat.setText("" + table.getValueAt(selRow, 7));
				txtAdresmailowy.setText("" + table.getValueAt(selRow, 8));
			}
		});
		
		bAdd.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				k.setImie(txtImie.getText());
				k.setNazwisko(txtNazwisko.getText());
				k.setAdres(txtAdres.getText());
				k.setPESEL(txtPesel.getText());
				k.setNr_Bankowy(txtNr_bankowy.getText());
				k.setId_firmy(Integer.parseInt(txtIdfirmy.getText()));
				k.setRabat(Integer.parseInt(txtRabat.getText()));
				k.setAdres_email(txtAdresmailowy.getText());
				kl.insert(k);
				model.setRowCount(0);
				refresh();
			}
		});
		
		
	bSave.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				k.setImie(txtImie.getText());
				k.setNazwisko(txtNazwisko.getText());
				k.setAdres(txtAdres.getText());
				k.setPESEL(txtPesel.getText());
				k.setNr_Bankowy(txtNr_bankowy.getText());
				k.setId_firmy(Integer.parseInt(txtIdfirmy.getText()));
				k.setRabat(Integer.parseInt(txtRabat.getText()));
				k.setAdres_email(txtAdresmailowy.getText());
				kl.update(k, Integer.parseInt(txtId.getText()));
				model.setRowCount(0);
				refresh();
			}
		});
	
	bDelete.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			kl.delete(Integer.parseInt(txtId.getText()));
			model.setRowCount(0);
			refresh();
		}
	});
	
bSearch.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			model.setRowCount(0);
			Klient klient = kl.selectbyId(Integer.parseInt(txtId.getText()));
			//refresh();
			model.addRow(new Object[]{klient.getId(),  k.getImie(), k.getNazwisko(), k.getAdres(), k.getPESEL(), k.getNr_Bankowy(), k.getId_firmy(), k.getRabat(), k.getAdres_email()});
		}
	});
	
	}

	public void refresh(){
		List <Klient> klienci = kl.selectAllKlient();
		for (Klient k: klienci){
			model.addRow(new Object[]{k.getId(), k.getImie(), k.getNazwisko(), k.getAdres(), k.getPESEL(), k.getNr_Bankowy(), k.getId_firmy(), k.getRabat(), k.getAdres_email()});
			
			
			
			
		}
	}
}


Problem polega na tym, że po uruchomieniu nie dostaje Null pointer Ecxeption:

java.lang.NullPointerException
	at gui.a.AddEvents(a.java:199)
	at gui.a.<init>(a.java:152)
	at gui.a$1.run(a.java:48)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Według eclipse błąd jest w miejscu public void AddEvents() - kiedy "wyłączam" metode w konstruktorze, gui normalnie się odpala. Co z tego skoro nie mogę niczego zmienić w tabeli.
Ma ktoś pomysł co jest nie tak?

Dodam, że napisałem podobny kod ręcznie (z tym, że w układzie Gridlayout i tam wszsytko śmiga - tu jak na złość nie...)

0
 
                JButton bAdd = new JButton("Add");
                panel.add(bAdd);
 
                JButton bSave = new JButton("Save");
                panel.add(bSave);
 
                JButton bDelete = new JButton("Delete");
                panel.add(bDelete);
 
                JButton bSearch = new JButton("Search");
                panel.add(bSearch);

W tym momencie definiujessz buttony jako zmienne lokalne, dlatego dalej w momencie dodawania listenerów mają one wartość null i rzuca wyjątek na klatę. Usuń deklaracje typów (bo masz już je wyżej w deklaracji pól klasy) i powinno zatrybić/

0

Dzieki:)

zatrybiło po tym jak zmieniłem na:


	bAdd = new JButton("Add");
		panel.add(bAdd);
		
		bSave = new JButton("Save");
		panel.add(bSave);
		
		bDelete = new JButton("Delete");
		panel.add(bDelete);
		
		bSearch = new JButton("Search");
		panel.add(bSearch);

1 użytkowników online, w tym zalogowanych: 0, gości: 1