JTable von einer andere Frame füllen ?

Code46

Erfahrenes Mitglied
Ich habe eine Frame wo ich in eine Form(DVD Name,DVD Preis etc.) ausfüllen kann. Nachdem ich das ausgefüllt habe, habe ich ein Button der das in ein JTabel hinzufügen soll jedoch ist dieser JTabel in einer anderen Frame. Code habe ich schon geschrieben aber bin jetzt bischen verwirrt um erlich zu sein.
Ich weis jetzt nicht genau wie ich das machen muss.

Mein Code mit dem JTABLE:
Code:
package cw;

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

class Product implements Comparable {
     private String name;
     private int cost;
public Product(int c, String n) {
    cost = c;
    name = n;
}
public Product() {
    this (0,"defaul");
}
public int getCost() {
    return cost;
}
public String getName() {
    return name;
}


public int compareTo(Object o) {
    Product temp = (Product) o;


    return (name.compareTo(temp.name));
}
}

public class DVD extends JFrame implements ActionListener
{

  ArrayList products = new ArrayList();
  JPanel panInput = new JPanel( new GridLayout(3,1)),
         panAdd = new JPanel(),
         panDelSort = new JPanel();

  JButton btnAdd = new JButton("Add"),
          btnDelete = new JButton("Delete"),
          btnSort = new JButton("Sort Products");

  JTable tab = new JTable();
  JMenuBar menubar = new JMenuBar();

  JMenu  file = new JMenu("File");
  JMenu  Edit = new JMenu("Edit");

  JMenuItem save = new JMenuItem("Save");
  JMenuItem exit = new JMenuItem("Exit");
  JMenuItem AddDVD = new JMenuItem("Add DVD");
  JMenuItem UpdateDVD = new JMenuItem("Update DVD");
  JMenuItem SearchDVD = new JMenuItem("Search DVD");

   DefaultTableModel tabMod = new DefaultTableModel();

  Product [] initialProducts = {};

  public DVD() {
    super("Product list");
    tab.setModel(tabMod);
    tabMod.addColumn("Title");
    tabMod.addColumn("Type");
    tabMod.addColumn("Notes");
    tabMod.addColumn("Price");
    tabMod.addColumn("Image");


    btnAdd.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {

      }
    });



    btnDelete.setToolTipText("Select the records to delete first");
    btnDelete.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {

      }
    });


    btnSort.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {

      }
    });
          menubar.add(file);
          menubar.add(Edit);

          file.add(save);
          file.add(exit);

          Edit.add(AddDVD);
		  Edit.add(UpdateDVD);
		  Edit.add(SearchDVD);

		  //panDelSort.add(btnAdd);
		//  panDelSort.add(btnDelete);
		//  panDelSort.add(btnSort);

		  panInput.add(panAdd);
		  panInput.add(panDelSort);

   exit.addActionListener(this);
   AddDVD.addActionListener(this);
   UpdateDVD.addActionListener(this);
   SearchDVD.addActionListener(this);
   this.setJMenuBar(menubar);
    getContentPane().add(panInput, BorderLayout.SOUTH);
    getContentPane().add(new JScrollPane(tab));
    loadInitialProducts();

}

public void loadInitialProducts() {
    for (int i = 0; i < initialProducts.length; i++) {
        products.add(initialProducts[i]);
    }
    loadProductsIntoTable();
}
public void loadProductsIntoTable() {
    tabMod.setRowCount(0);

    String [] row = new String [2];
    for (Iterator i = products.iterator(); i.hasNext();) {
        Product temp = (Product) i.next();
        row[0] = temp.getName();
        row[1] = Integer.toString(temp.getCost());
        tabMod.addRow(row);
    }
}
public static void main(String [] a){
    DVD me = new DVD();
    me.addWindowListener(new WindowAdapter () {
            @Override
       public void windowClosing(WindowEvent e) {
          System.exit(0) ;
        }
      });
    me.pack();
    me.setVisible(true);
  }



public void actionPerformed(ActionEvent e) {
			if (e.getSource() == AddDVD) {
				new AddDVD();

		} else {

			   if (e.getSource() == SearchDVD) {
				new SearchDVD();

		} else {


			   if (e.getSource() == UpdateDVD) {
				new UpdateDVD();

			}
                           else if (e.getSource() == exit) {

				System.exit(0);
			}

		   }
		}
}
         }


Der andere Frame mit der Form:
Code:
package cw;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import static javax.swing.JOptionPane.*;

public class AddDVD extends
JFrame implements ActionListener {

JTextField jtfTitle,jtfPrice,jtfImage,jtfNotes;
JButton btnadd,btnclear,btnimage;
JComboBox jcbType = new JComboBox();
LibraryData db = new LibraryData();



int value;
String name,notes,image;
boolean type,ok;

public AddDVD() {

btnadd = new JButton("Add new DVD/Music");
btnclear = new JButton("Clear Fields");
btnimage = new JButton("Upload Image");
jtfTitle = new JTextField(30);
jtfPrice = new JTextField(5);
jtfNotes = new JTextField(40);
jtfImage = new JTextField(50);
setLayout(new BorderLayout());
setBounds(400, 400, 450, 200);
setTitle("Add DVD/Music");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setResizable(false);
setVisible(true);

JPanel top = new JPanel();
top.setLayout(new GridLayout(6, 3));
top.add(new JLabel("Title: ", JLabel.RIGHT));
top.add(jtfTitle);
top.add(new JLabel("Type:", JLabel.RIGHT));
top.add(jcbType);
String[] ratingStr = {
"Film","Music"};
for (int i = 0; i < ratingStr.length; ++i)
{
jcbType.addItem(ratingStr[i]);
}
jcbType.setBackground(Color.lightGray);
jcbType.setFocusable(true);
top.add(new JLabel("Notes:", JLabel.RIGHT));
top.add(jtfNotes);
top.add(new JLabel("Price:", JLabel.RIGHT));
top.add(jtfPrice);
top.add(new JLabel("Image:", JLabel.RIGHT));
top.add(jtfImage);
add("North", top);



JPanel bottom = new JPanel();
bottom.add(btnadd);
btnadd.addActionListener(this);
bottom.add(btnclear);
btnclear.addActionListener(this);
bottom.add(btnimage);
btnimage.addActionListener(this);
add("South", bottom);}






    public void actionPerformed(ActionEvent e) {
     if (e.getSource() == btnadd){
LibraryData.dataConection();
        try {

            name =  jtfTitle.getText();

             if (name.equals("")){
                            showMessageDialog(this,"Enter DVD name");return;
                        }
                        if (jcbType.getSelectedItem() =="DVD"){type = true;}
                        else{type = false;}
                        notes = jtfNotes.getText();
                        value = Integer.parseInt(jtfPrice.getText());
                        image= jtfImage.getText();
                        } catch (Exception nfe) {
            System.out.println(nfe.toString());
            JOptionPane.showMessageDialog(this, " Please Input Value of Item in Numbers only ");
            return;
        }





        LibraryData.add(name, type, notes, value, image);
        if (!ok) {
            JOptionPane.showMessageDialog(this, " Item Successfully added to Database");

        }
        if (ok) {
            JOptionPane.showMessageDialog(this, "Item Could Not be added into the Database ");
        }
                      }
     else if (e.getSource() ==btnimage)
        {
            try
                {
                    JFileChooser chooser = new JFileChooser();
                    chooser.setCurrentDirectory(new File("C:\\Users\\Serdar\\Desktop\\CW\\"));
                    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

                    FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "Image files", "jpg", "png");
                    chooser.setFileFilter(filter);
                        try
                        {
                            int code = chooser.showOpenDialog(this);
                            if (code == JFileChooser.APPROVE_OPTION) {
                            File selectedFile = chooser.getSelectedFile();
                            jtfImage.setText(selectedFile.getName());}
                        }
                        catch (Exception f) {}

                }
            catch(Exception ev){}
        }
                else if (e.getSource() == btnclear) {
                  jtfTitle.setText("");
                  jtfNotes.setText("");
                  jtfPrice.setText("");
                   jtfImage.setText("");

                }
        }

    }
 
Übergib die Table dem anderen frame über eine set-Funktion - Das wäre mein Ansatz.

in dem Frame, in dem sich die Table nicht befindet erstellst du eine JTable-Variable
Code:
JTable table = null;
Über eine set-Methode im anderen Frame kann das Table vom ersten Frame übergeben werden
- Hier ist wichtig zu wissen, dass kein neues Table erstellt wird, sondern die Speicheradresse weitergegeben wird. Daraus folgt, dass du direkt auf das Table im anderen Frame zugreifst.

Du brauchst im Frame mit dem Table also nur
Code:
anderesFrame.setTable(tab);
aufrufen. Danach kannst du es auch im anderen Frame verwenden.
Hoffe das war verständlich :)
Bei Fragen - schieß los.

MfG - Pasukaru

Edit: Hab hier was gefunden, das erklärt wie's funktioniert
Snape hat gesagt.:
"Wie bereits erwähnt, sind Objektvariablen Referenzen, also Zeiger. Zwar werden auch sie bei der Übergabe an eine Methode per Wert übergeben. Da innerhalb der Methode aber der Zeiger auf das Originalobjekt zur Verfügung steht (wenn auch in kopierter Form), wirken sich Veränderungen an dem Objekt natürlich direkt auf das Originalobjekt aus und sind somit für den Aufrufer der Methode sichtbar. Wie in allen anderen Programmiersprachen entspricht die call by value-Übergabe eines Zeigers damit natürlich genau der Semantik von call by reference."
 
Zuletzt bearbeitet:
Zurück