Wątek przeniesiony 2015-12-23 18:44 z Java przez bogdans.

Java formularz, jtable

0

Witam,

Piszę projekt na zaliczenie w Java używając SWING-a.
Stworzyłem klasę w której mam formularz z polami tekstowymi itp.
W drugiej klasie mam jtable, kilka kolumn.
Chciałbym wczytywać z formularza [klasa 1] dane do kolumn tabeli[klasa2].
W klasie z tabelą jtable mam przycisk dodaj wywołuję w ActionPerformed dla tego przycisku formularz.
Nie wiem jednak co zrobić dalej, aby te dane zostały przechwycone do tabeli i w niej zapisane.

Jakieś pomysły?

Dzięki za pomoc.

2

Musisz mieś w formularzu[klasa1] pole z referencją do klasy2.

0

a jak to zrobić? szczerze to nic mi to nie mówi

0
private Klasa2 referencjaDoKlasa2;

Przekazać przez konstruktor.

0

to jest moj formularz:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Marek
 */
@SuppressWarnings("serial")
public class formularz_dodawania_filmow extends JFrame implements ActionListener  {
    
    JButton dodajfilm,anuluj;
    JLabel ltytul, lnosnik,lkategoria,lrokpremiery,lczastrwania,lopis,lobsada,lrezyser;
    JTextField ttytul,tczastrwania,topis,tobsada,trezyser,trokpremiery;
    JComboBox kategorielista,nosnik,rokpremiery;
    String txtytul,txopis,txobsada,txrezyser;
    JCheckBox polecane;
    @SuppressWarnings("unchecked")
    public void formularz_dodawania_filmow()
    {
        setTitle("Dodaj film");
        setSize(500,500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);
        lkategoria= new JLabel("Kategoria:");
        kategorielista= new JComboBox();
        kategorielista.setBounds(200,20,180,20);
        kategorielista.addItem("Wybierz kategorię filmu");
        kategorielista.addItem("Akcja");
        kategorielista.addItem("Dramat");
        kategorielista.addItem("Horror");
        kategorielista.addItem("Kryminał");
        kategorielista.addItem("Wojenny");
        kategorielista.addItem("Thriller");
        add(kategorielista);
        
         lnosnik= new JLabel("Rodzaj nośnika:");
        nosnik= new JComboBox();
        nosnik.setBounds(20,20,150,20);
        nosnik.addItem("Rodzaj nośnika");
        nosnik.addItem("CD");
        nosnik.addItem("DVD");
        nosnik.addItem("Blu-ray");
        add(nosnik);
        
        
        ltytul= new JLabel("Tytuł filmu:");
        ltytul.setBounds(20,40,170,40);
        add(ltytul);
        ttytul= new JTextField("");
        ttytul.setBounds(160,50,250,20);
        add(ttytul);
        
        txtytul=ttytul.getText();
        
          lrokpremiery= new JLabel("Rok premiery:");
        lrokpremiery.setBounds(20,60,190,60);
        add(lrokpremiery);
        trokpremiery= new JTextField("");
        trokpremiery.setBounds(160,80,250,20);
      
        add(trokpremiery);
        
         lczastrwania= new JLabel("Długość trwania:");
        lczastrwania.setBounds(20,100,230,100);
        add(lczastrwania);
        tczastrwania= new JTextField("");
        tczastrwania.setBounds(160,140,250,20);
        add(tczastrwania);
        
        
        lrezyser= new JLabel("Reżyser:");
        lrezyser.setBounds(20,120,250,120);
        add(lrezyser);
        trezyser= new JTextField("");
        trezyser.setBounds(160,170,250,20);
        add( trezyser);
        
        
        
        lobsada= new JLabel("Obsada:");
        lobsada.setBounds(20,140,270,140);
        add(lobsada);
        tobsada= new JTextField("");
        tobsada.setBounds(160,200,250,100);
        add(tobsada);
        
        
             
        lopis= new JLabel("Opis fabuły:");
        lopis.setBounds(20,235,290,160);
        add(lopis);
        topis= new JTextField("",500);
        topis.setBounds(160,325,250,100);
        add(topis);
        setVisible(true);
      
        dodajfilm= new JButton("Dodaj film");
        dodajfilm.setBounds(160,435,100,20);        
        add(dodajfilm);
            dodajfilm.addActionListener(this);
            dodajfilm.setActionCommand("dodajfilm");
                //Definiowanie przycisku anuluj
        anuluj= new JButton("Anuluj");
        anuluj.setBounds(305,435,100,20);        
        add(anuluj);
        anuluj.addActionListener(this);
      
        
       
        
            
    }

@Override
public void actionPerformed(ActionEvent e) {
       
Object z=e.getSource();
       
if(z==dodajfilm)
{       
     txtytul=ttytul.getText();
     txrezyser=trezyser.getText();
     
}
       
else if (z==anuluj)
{
    
    dispose();
}
 }    
    }
0

a to jest Moja tabela, na razie 2 kolumny, wazne zeby zaskoczyly chociaż 2:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import javax.swing.*; import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
class baza extends JFrame implements ActionListener
{
JTextField t1;
JTextField t2;
JButton b1,b2;
JLabel l1,l2;
JTable table;
int count,count1 = 0;
Object rowData[][];
DefaultTableModel model;
public void baza ()
{
setTitle("Baza");
setDefaultCloseOperation(EXIT_ON_CLOSE);       
String columnNames[] = {"Tytuł","Reżyser"};
    model = new DefaultTableModel(rowData, columnNames);
table = new JTable(model);
setLayout(new FlowLayout(FlowLayout.CENTER));
JScrollPane js = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
js.setPreferredSize(new Dimension(400,300));
table.setFillsViewportHeight(true);
t1 = new JTextField(12);
t2 = new JTextField(12);
b1 = new JButton("ADD");
b2 = new JButton("Remove");
l1 = new JLabel("ENTER FIRST NAME");
l2 = new JLabel("ENTER LAST NAME"); 
add(l1);
add(t1);
add(l2);
add(t2);
add(b1);
add(b2);
add(js);
b1.addActionListener(this);
b1.setActionCommand("add");
b2.addActionListener(this);
b2.setActionCommand("remove");
setSize(700,600);
setVisible(true);

}
public void actionPerformed(ActionEvent ae){
if ("add".equals(ae.getActionCommand()))
{
   formularz_dodawania_filmow y= new formularz_dodawania_filmow();
   y.formularz_dodawania_filmow();
 model = (DefaultTableModel) table.getModel();
String get1 = y.txtytul;
String get2 = y.txrezyser;
 model.addRow(new Object[]{get1,get2});
}

  
else if("remove".equals(ae.getActionCommand()))
{
   model = (DefaultTableModel) table.getModel();
    model.removeRow(table.getSelectedRow());
}
}


}

może to coś pomoże

0

Jeszcze potrzeba jest klasa, w której tworzysz obiekty klas baza i formularz.

0

obiekt klasy formularz tworze w klasie baza a oiekt klasy baza w klasie formularz .. klikając na przycisk add wywołuję formularz, ale nie wiem co dać w Actionperformed dla przycisku dodajfilm w klasie formularz, nie wiem co tam wpisać żeby zapisywało do tabeli dane z formularza. Trochę zagmatwane :)

2

W klasie baza zamień wiersze

formularz_dodawania_filmow y= new formularz_dodawania_filmow();
y.formularz_dodawania_filmow();

na wiersz

formularz_dodawania_filmow y= new formularz_dodawania_filmow(baza.this);

W klasie formularz dopisz konstruktor:
fragment

    JCheckBox polecane;
    @SuppressWarnings("unchecked")
    public void formularz_dodawania_filmow()
    {
        setTitle("Dodaj film");

zamień na:

    JCheckBox polecane;
    baza oknoBazy; 
    @SuppressWarnings("unchecked")
    public formularz_dodawania_filmow(baza oknoBazy)
    {
        this.oknoBazy = oknoBazy; 
        setTitle("Dodaj film");

Będziesz miał potrzebną referencję i możliwość zmian w klasie baza z klasy formularz, np.

oknoBazy.model.add(...)
0

dzięki wielkie za pomoc, zrobiłem to.. jednak dalej nie wiem jak to skończyć, będę coś próbował

0

Zmieniasz dane w modelu i odświeżasz okno:

model.fireTableDataChanged();
0

Działa, bardzo dziękuję za pomoc

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