0

Hello I'm new to Java so all help appreciated

I have already searched for similar threads but with no results helping me.

I whant to save the data that I input in my Jtable to another Jtable.

So the name address etc. that I input in the customer (kundGUI) class to be saved to my OrderGUI jtable
after that I press the save(spara) button .

Here is my customer class:

public class Kund {
    private String fNamn;
    private String efterNamn;
    private String email;
    private String adress;
    private String telefon;
    private String kundnr;
    
    public String getfNamn() {
        return fNamn;
    }
    public void setfNamn(String fNamn) {
        this.fNamn = fNamn;
    }
    public String getEfterNamn() {
        return efterNamn;
    }
    public void setEfterNamn(String efterNamn) {
        this.efterNamn = efterNamn;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getAdress() {
        return adress;
    }
    public void setAdress(String adress) {
        this.adress = adress;
    }
    public String getTelefon() {
        return telefon;
    }
    public void setTelefon(String telefon) {
        this.telefon = telefon;
    }
	public String getKundnr() {
		return kundnr;
	}
	public void setKundnr(String kundnr) {
		this.kundnr = kundnr;
		
	}
}

Here is my customer registration class:

import java.util.ArrayList;

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class KundRegister extends AbstractTableModel {

	/*
	 * vi definierar index nummerna för kolumnerna in tablet
	 * för att kunna returna rätt värde i getValue() metoden
	 * och uppdatera rätt värde i setValue() metoden
	 */
	private static final int COLUMN_FOR_NAMN     = 0;
	private static final int COLUMN_EFTER_NAMN     = 1;
	private static final int COLUMN_KUND_NR		=2;
	private static final int COLUMN_EMAIL        = 3;
	private static final int COLUMN_ADRESS     = 4;
	private static final int COLUMN_TELEFON     = 5;

	//Listan innehåller kunds objekts
	private List<Kund> listkunds;

	//Namnet för kolumnheadern i tablet
	private String[] columnNames;

	//Skapar ny instans av modellen
	public KundRegister() {
		// initierar kund list
		this.listkunds = new ArrayList<Kund>();
		// definierar kolumnnamn
		columnNames = new String[] {"Förnamn", "Efternamn","Kundnummer",
				"Email", "Adress", "Telefon"};
	}
	//returnerar antalet kolumner i tablet
	public int getColumnCount() {
		return columnNames.length;
	}
	//returnerar namnet av en specifik kolumn i tablet
	public String getColumnName(int column) {
		return columnNames[column];
	}   
	//returnerar antalet rader i tablet
	public int getRowCount() {
		return listkunds.size();
	}

	/*
	 * Denna metod kommer att användas av tablet komponenten för att hämta 
	 * värde av en given cell vid [row, column]
	 */ 
	public Object getValueAt(int rowIndex, int columnIndex) {
		Object value = null;

		Kund kund = listkunds.get(rowIndex);

		switch (columnIndex) {
		case COLUMN_FOR_NAMN:
			value = kund.getfNamn();
			break;
		case COLUMN_EFTER_NAMN:
			value = kund.getEfterNamn();
			break;
		case COLUMN_EMAIL:
			value = kund.getEmail();
			break;
		case COLUMN_ADRESS:
			value = kund.getAdress();
			break;
		case COLUMN_TELEFON:
			value = kund.getTelefon();
			break;
		case COLUMN_KUND_NR:
			value = kund.getKundnr();
		}

		return value;
	}

	/*
	 * Denna metod kommer att användas av tablet komponenten när 
	 * användaren redigerar en given cell vid [row, column] 
	 * Motsvarande Kund objektet kommer att uppdateras
	 */
	public void setValueAt(Object value, int rowIndex, int columnIndex) {
		Kund kund = listkunds.get(rowIndex);

		switch (columnIndex) {
		case COLUMN_FOR_NAMN:
			kund.setfNamn(value.toString());
			break;
		case COLUMN_EFTER_NAMN:
			kund.setEfterNamn(value.toString());
			break;
		case COLUMN_KUND_NR:
			kund.setKundnr(value.toString());
			break;
		case COLUMN_EMAIL:
			kund.setEmail(value.toString());
			break;
		case COLUMN_ADRESS:
			kund.setAdress(value.toString());
			break;
		case COLUMN_TELEFON:
			kund.setTelefon(value.toString());
			break;
		}       
	}
	//Eftersom varje cell i tablet kan ändras, returnerar vi alltid värdet "true"
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return true;
	}   
	/*Denna metod tillåter programmet att lägga till en tom kund 
	 * En ny rad kommer att bifogas i tablet
	 */
	public void nyKund(Kund akund) {
		this.listkunds.add(akund);
	}

	/*
	 * Denna metod tillåter programmet att ta bort den valda raden i tablet, 
	 * motsvarande Kundobjekt i Kund listan tas också bort.
	 */
	public void tabortKund(int rowIndex) {
		this.listkunds.remove(rowIndex);
	}

	}

Here is my customer Gui class;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;


public class KundGUI extends JFrame {

	private JTable tableContact = new JTable();
	private KundRegister contactModel = new KundRegister();
	private JButton buttonNy = new JButton("Ny kund");
	private JButton buttonTabort = new JButton("Ta bort kund");
	private JButton buttonAvbryta = new JButton("Avbryt");
	private JButton buttonSpara = new JButton("Spara");

	public KundGUI() {
		super("Kundhantering");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLayout(new BorderLayout());

		tableContact.setModel(contactModel);

		getContentPane().add(new JScrollPane(tableContact), BorderLayout.CENTER);

		buttonNy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				laggtillKund();
			}
		});

		buttonTabort.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				tabortKund();
			}
		});
		
		buttonAvbryta.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				AvbrytaProgram();
			}
		});
		
		buttonSpara.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				sparaProgram();
			}
		});
		
		JPanel panelButton = new JPanel();
		panelButton.setLayout(new FlowLayout());
		panelButton.add(buttonNy);
		panelButton.add(buttonTabort);
		panelButton.add(buttonAvbryta);
		panelButton.add(buttonSpara);
		
		buttonNy.setToolTipText("Klicka här för att lägga till ny kund");
		buttonTabort.setToolTipText("Klicka här för att ta bort markerad kund");
		buttonAvbryta.setToolTipText("Klicka här för att Avbryta programmet");

		getContentPane().add(panelButton, BorderLayout.PAGE_END);

		pack();

		setLocationRelativeTo(null);
		setVisible(true);
	}
	//Metoderna som är kopplade till knapparna
	private void laggtillKund() {
		contactModel.nyKund(new Kund());
		contactModel.fireTableDataChanged();
	}

	private void tabortKund() {
		int rowIndex = tableContact.getSelectedRow();
		int x = JOptionPane.showConfirmDialog(null, "Är du säker att du vill ta bort kunden?", "Borttagning av kund", JOptionPane.INFORMATION_MESSAGE);
		if (rowIndex >= 0 && x ==0) {
			contactModel.tabortKund(rowIndex);
			contactModel.fireTableDataChanged();
		}
	}
	
	private void sparaProgram(){
		  
	}

	private void AvbrytaProgram() {
		int x = JOptionPane.showConfirmDialog(null, "Är du säker att du vill avbryta?", "Stäng ner kundhantering", JOptionPane.INFORMATION_MESSAGE);

		if(x==0)
			dispose();
		
	}


}

And finally here is my order GUI class that I whant the Jtable to be saved:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;


public class OrderGUI extends JFrame {
	

	private JTable tableContact = new JTable();
	private KundRegister contactModel = new KundRegister();
	private JButton buttonNy = new JButton("Ny kund");
	private JButton buttonTabort = new JButton("Ta bort kund");
	private JButton buttonAvbryta = new JButton("Avbryt");
	private JButton buttonSpara = new JButton("Spara");
	
	
	public OrderGUI() {
		super("Orderhantering");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLayout(new BorderLayout());	
		
		

		tableContact.setModel(contactModel);

		getContentPane().add(new JScrollPane(tableContact), BorderLayout.CENTER);

		buttonNy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				laggtillKund();
			}
		});

		buttonTabort.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				tabortKund();
			}
		});
		
		buttonAvbryta.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				AvbrytaProgram();
			}
		});
		
		buttonSpara.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				sparaProgram();
			}
		});
		
	
		JPanel panelButton = new JPanel();
		panelButton.setLayout(new FlowLayout());
		panelButton.add(buttonNy);
		panelButton.add(buttonTabort);
		panelButton.add(buttonAvbryta);
		panelButton.add(buttonSpara);
		
		buttonNy.setToolTipText("Klicka här för att lägga till ny kund");
		buttonTabort.setToolTipText("Klicka här för att ta bort markerad kund");
		buttonAvbryta.setToolTipText("Klicka här för att Avbryta programmet");

		getContentPane().add(panelButton, BorderLayout.PAGE_END);

		pack();

		setLocationRelativeTo(null);
		setVisible(true);
	}
	//Metoderna som är kopplade till knapparna
	private void laggtillKund() {
		contactModel.nyKund(new Kund());
		contactModel.fireTableDataChanged();
	}

	private void tabortKund() {
		int rowIndex = tableContact.getSelectedRow();
		int x = JOptionPane.showConfirmDialog(null, "Är du säker att du vill ta bort kunden?", "Borttagning av kund", JOptionPane.INFORMATION_MESSAGE);
		if (rowIndex >= 0 && x ==0) {
			contactModel.tabortKund(rowIndex);
			contactModel.fireTableDataChanged();
		}
	}
	
	private void sparaProgram(){
		
		dispose();
	}

	private void AvbrytaProgram() {
		int x = JOptionPane.showConfirmDialog(null, "Är du säker att du vill avbryta?", "Stäng ner kundhantering", JOptionPane.INFORMATION_MESSAGE);

		if(x==0)
			dispose();
		
	}

	}

Regards

Steve

Edited by Libanesaren: n/a

2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by mKorbel
0

not going to test or run bunch of your code posted here

1) your AbstractTableModel not correct, there is useless TableModel or whole class Kund, because both are Models, and you can fill data for JTable from class Kund correctly, and returns changes from JTable to the class Kund correctly too

2) by extends JTable use DefaultTableModel, I can't see any reason for implements AbstractTableModel with non_stable and crossclasses methods

3) don't create a new JFrame on Runtime, because these Objects never gone from memory (you can test that in TaskManager or Java Profiler), I think that this is job for CardLayout

4) you can :

- share TableModel for two or more JTable, but again your AbstractTableModel doesn't contains notifiers, methods for fireXxxXxx, then changes in one JTable never will be refreshing View for another JTable, there is (Hello I'm new to Java so all help appreciated) only one way implements DefaultTableModel instead

- each JTable will have own TableModel, then you can fill one TableModel from another and vice versa, e.g. refresh all changes to first TableModel, but this will be never works with your TableModel

Edited by mKorbel: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.