Przypisać akcję do przycisku

0

Witam,mam taki problem:piszę program w javie, stworzyłem przycisk "Edytuj", mam też klasę Edycja, w której jest co ma się dziać. Problem w tym jak to połączyć w całość, żeby po kliknięciu na przycisk uruchamiała się edycja? Jeśli mógłby ktoś pomóc byłbym wdzięczny. Załączam fragment kodu:

this.add(new JScrollPane(table));
 Box controls = Box.createHorizontalBox();
 controls.setBorder(BorderFactory.createEmptyBorder(10,5,5,5));
 Dimension filter=new Dimension(5,5);
 controls.add(button("Sortowanie","cmd::sortuj"));
 controls.add(Box.createRigidArea(filter));
 controls.add(button("Filtrowanie","cmd::filtruj"));
 //controls.add(Box.createGlue());
 controls.add(button("Edycja","cmd::edytuj"));
 controls.add(Box.createRigidArea(filter));
 controls.add(button("Usuwanie","cmd::usun"));
 //controls.add(Box.createGlue());
 add(controls,"South");
}

Akcję trzeba by przypisać chyba w tym miejscu:

public void actionPerformed(ActionEvent e){
 JFileChooser fileChoser=new JFileChooser();
 //FileFilter type1=new FileFilter("Pliki tekstowe",new String[]{".txt",".doc"})
 fileChoser.setDialogTitle("Otwieranie pliku");
 this.getContentPane().add(fileChoser);
 fileChoser.setVisible(true);

   int ret = fileChoser.showOpenDialog(this);

        if (ret == JFileChooser.APPROVE_OPTION) {
        BufferedReader buf=null;
        
        int k=0;
        file = fileChoser.getSelectedFile();
        fileChoser.getCurrentDirectory().toString();
        try{
        buf = new BufferedReader(new FileReader(file));
             while(linia!=null)
           {
         for(int i=0;i<5;i++)
           {
              linia=buf.readLine();
               
            d[k][i]=linia;   
           }
             k+=1;
          }
        buf.close();
        }catch (IOException w)
        {
           JOptionPane.showMessageDialog(null,"Blad odczytu pliku tekstowego");
         }
        table=new JTable(d,colNames);     
        this.add(new JScrollPane(table));
        //pole_t.append(file.getName());
              //pole_t.setCaretPosition(pole_t.getDocument().getLength());

         }
         if(ret==JFileChooser.CANCEL_OPTION){

         }}

A to jest klasa,którą chce przypisac:

package employeeapp;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author Admin
 */
public class Edycja extends JFrame {
  public JTextField[] pole;
  private BeanDataModel model;
  private JLabel[] etykieta;  
  int liczba_pol;
  String nazwa_kolumny;
  public Edycja(){
        setTitle("Edycja");
        setSize(200,200);
        
        liczba_pol=model.getColumnCount();
        pole=new JTextField[liczba_pol];
        etykieta=new JLabel[liczba_pol];
       
        for(int i=0;i<liczba_pol;i++){
            nazwa_kolumny=model.getColumnName(i);
            etykieta[i]=new JLabel("nazwa_kolumny");
            getContentPane().add(etykieta[i]);
            pole[i]=new JTextField();
            getContentPane().add(pole[i]);
        }
        JButton ok=new JButton("Zatwierdz");
        JButton cancel=new JButton("Odrzuc");
        getContentPane().add(ok);
        getContentPane().add(cancel);
        pack();
        setVisible(true);
  }
  
  
}
0

Nie wiem czy o to Ci chodzi ale zawsze możesz zaimplementować w tej klasie interfejs ActionListener i dodać do klasy metodę actionPerformed no i tam używać sobie tego czego chcesz z tej klasy.

0

no właśnie tak jest to mniej więcej zrobione jest metoda actionPerformed gdzie jest już przypisana jedna akcja niestety nie pod przycisk. Mi chodzi o to aby pod przycisk podpiąć odpowiednią akcję. Klikam na przycisk i wykonuje się coś z klasy Edycja(otwiera się okno edycji gdzie można zmienić dane) tylko nie wiem jak to zrobić?może jakiś przykład kodu?

0

Przypinanie akcji pod przycisk wygląda w ten sposób:

JButton b = new JButton("Przycisk");
b.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		//tutaj wstawiasz kod wykonywany po naciśnięciu przycisku.
	}
});

Równie dobrze słuchaczem akcji może być twoja klasa Edycja jeśli zaimplementujesz tam interfejs ActionListener.

0

@alfred13, niezbyt rozumiem Twój problem. Może wystarczy lekko rozbudowane rozwiązanie @rOOneY'a

JButton  b = new JButton("Przycisk");
b.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
                new Edycja();
        }
});
0

Chodzi mi o to aby po naciśnięciu przycisku edycja uruchomiła się klasa edycja w której jest procedura pozwalająca na edycję danych

0

A sprawdziłeś moją propozycję?

0

Próbowałem to wkleić ale nie bardzo zadziałało,wstawiam kod całej klasy

package employeeapp;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableRowSorter;
public class BeanTableGui<T> extends JFrame implements ActionListener {
// Model danych
private BeanDataModel<T> model;
// Tabela
String[] colNames={"Imie","Nazwisko","Adres","Pensja"};
Object[][]d=new Object[15][5];
private JTable table;
//Sorter
private TableRowSorter<BeanDataModel<T>> sorter;
//private FilterDialog filterDialog;
//private SortPanel sortpanel;
private File file;
String linia=" ";
private Edycja edycja;
public BeanTableGui(String title, final BeanDataModel<T> model) {
super(title);
this.model=model;
//setTitle("Menu");
setSize(400,400);
//JPanel panel=new JPanel();
JMenuBar menubar=new JMenuBar();
JMenu[] menu ={new JMenu("Plik"), new JMenu("Pomoc")};
JMenuItem[] items={new JMenuItem("Odczyt"),new JMenuItem("Zapis"),new JMenuItem("Edycja")};
for(int i=0;i<items.length;i++){
       items[i].addActionListener(this);
       menu[i%1].add(items[i]);
   }
for(JMenu jm:menu)
        menubar.add(jm);
setJMenuBar(menubar);
setBackground(new Color(210,246,255));
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Utworzenie sortera
sorter=new TableRowSorter<BeanDataModel<T>>(model);
// Tabela i ustawienia sortera
table=new JTable(model);
table.setRowSorter(sorter);
this.add(new JScrollPane(table));
 Box controls = Box.createHorizontalBox();
 controls.setBorder(BorderFactory.createEmptyBorder(10,5,5,5));
 Dimension filter=new Dimension(5,5);
 controls.add(button("Sortowanie","cmd::sortuj"));
 controls.add(Box.createRigidArea(filter));
 controls.add(button("Filtrowanie","cmd::filtruj"));
 //controls.add(Box.createGlue());
 controls.add(button("Edycja","cmd::edytuj"));
 controls.add(Box.createRigidArea(filter));
 controls.add(button("Usuwanie","cmd::usun"));
 //controls.add(Box.createGlue());
 add(controls,"South");
}
public BeanDataModel<T> getModel(){
return model;
}
public TableRowSorter<BeanDataModel<T>> getSorter(){
return sorter;
}
public JTable getTable(){
return table;
}

public void actionPerformed(ActionEvent e){
 JFileChooser fileChoser=new JFileChooser();
 //FileFilter type1=new FileFilter("Pliki tekstowe",new String[]{".txt",".doc"})
 fileChoser.setDialogTitle("Otwieranie pliku");
 this.getContentPane().add(fileChoser);
 fileChoser.setVisible(true);

   int ret = fileChoser.showOpenDialog(this);

        if (ret == JFileChooser.APPROVE_OPTION) {
        BufferedReader buf=null;
        
        int k=0;
        file = fileChoser.getSelectedFile();
        fileChoser.getCurrentDirectory().toString();
        try{
        buf = new BufferedReader(new FileReader(file));
             while(linia!=null)
           {
         for(int i=0;i<5;i++)
           {
              linia=buf.readLine();
               
            d[k][i]=linia;   
           }
             k+=1;
          }
        buf.close();
        }catch (IOException w)
        {
           JOptionPane.showMessageDialog(null,"Blad odczytu pliku tekstowego");
         }
        table=new JTable(d,colNames);     
        this.add(new JScrollPane(table));
        //pole_t.append(file.getName());
              //pole_t.setCaretPosition(pole_t.getDocument().getLength());

         }
         if(ret==JFileChooser.CANCEL_OPTION){

         }

}


private Component button(String string,String string0) {
 JButton Edycja=new JButton(string);
 Edycja.setActionCommand(string0);
 Edycja.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
 
          new Edycja();
          
    }
  // System.out.println(e.getActionCommand()); 
   
 });
 return Edycja;
}
}

oraz kod klasy która ma być wykonywana po naciśnięciu na przycisk

package employeeapp;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 *
 * @author Admin
 */
public class Edycja extends JFrame {
  public JTextField[] pole;
  private BeanDataModel model;
  private JLabel[] etykieta;  
  int liczba_pol;
  String nazwa_kolumny;
  public Edycja(){
        setTitle("Edycja");
        setSize(200,200);
        
        liczba_pol=model.getColumnCount();
        pole=new JTextField[liczba_pol];
        etykieta=new JLabel[liczba_pol];
       
        for(int i=0;i<liczba_pol;i++){
            nazwa_kolumny=model.getColumnName(i);
            etykieta[i]=new JLabel("nazwa_kolumny");
            getContentPane().add(etykieta[i]);
            pole[i]=new JTextField();
            getContentPane().add(pole[i]);
        }
        JButton ok=new JButton("Zatwierdz");
        JButton cancel=new JButton("Odrzuc");
        getContentPane().add(ok);
        getContentPane().add(cancel);
        pack();
        setVisible(true);
  }
  
  
}
0

Nie ma metody main(), zatem nie mam jak sprawdzić.

public class Edycja extends JFrame  {
  public JTextField[] pole;
  private BeanDataModel model; //model jest null
  private JLabel[] etykieta; 
  int liczba_pol;
  String nazwa_kolumny;
  public Edycja(){
        setTitle("Edycja");
        setSize(200,200);
       
        liczba_pol=model.getColumnCount(); //tu się musi wywalić, bo model==null

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