Tabela usuwanie i dodawnaie wierszy

0

Witam

Jak w prosty sposób napisać tabele w której można dodać i usunąć wiersz. Poniżej
TO co udało mi się stworzyć do tej pory. Piwoninem dziedziczyć po AbstractModel??
Z góry dziękuje za pomoc.

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

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Tabela extends JPanel {
private boolean DEBUG = false;

public Tabela() {
    super(new GridLayout(1,0));

    String[] columnNames = {"Data",
                            "Waga",
                         
                           };

    Object[][] data = {
        {"0", "0"},
        {"0", "0"},
        
    
    };

    final JTable table = new JTable(data, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);

    if (DEBUG) {
        table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
         
            }
        });
    }
    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane);
	JButton mb = new JButton("Dodaj");
	mb.setPreferredSize(new Dimension(80,20));
	
	add(mb, BorderLayout.SOUTH);
	JButton mc = new JButton("Usuń");
	mc.setPreferredSize(new Dimension(80,20));
	add(mc, BorderLayout.SOUTH);
}

//GUI
private static void createAndShowGUI() {

    JFrame frame = new JFrame("Tabela");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    Tabela newContentPane = new Tabela();
    newContentPane.setOpaque(true); 
    frame.setContentPane(newContentPane);


    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}

0

Nie wiem czy o to chodziło w 100% ale działa ;-P Pozdrawiam

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Tabela extends JPanel {
	private boolean DEBUG = false;

	public Tabela() {
		super(new GridLayout(1, 0));

		String[] columnNames = { "Data", "Waga", };

		Object[][] data = { { "0", "0" }, { "0", "0" }, };

		final DefaultTableModel tab = new DefaultTableModel(data, columnNames);
		final JTable table = new JTable(tab);
		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
		table.setFillsViewportHeight(true);

		if (DEBUG) {
			table.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent e) {

				}
			});
		}
		JScrollPane scrollPane = new JScrollPane(table);

		add(scrollPane);

		JButton mb = new JButton("Dodaj");
		mb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Object[] dd = { "dodana", "dodana" };
				tab.addRow(dd);
			}
		});
		mb.setPreferredSize(new Dimension(80, 20));
		add(mb, BorderLayout.SOUTH);

		JButton mc = new JButton("Usuń");
		mc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tab.removeRow(0);
			}
		});
		mc.setPreferredSize(new Dimension(80, 20));
		add(mc, BorderLayout.SOUTH);
	}

	// GUI
	private static void createAndShowGUI() {

		JFrame frame = new JFrame("Tabela");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		Tabela newContentPane = new Tabela();
		newContentPane.setOpaque(true);
		frame.setContentPane(newContentPane);

		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {

		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}
0

Pośrednio chciałbym żeby usuwał wybrany wiersz a nie pierwszy.I przydałoby się wyskakujące okno przy wciśnięciu Dodaj żeby można było wklepać wartości.
Ale z góry dziękuje za pomoc.

Pozdro

0

defaulttablemodel jak pamiętam
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
http://java.sun.com/docs/books/tutorial/uiswing/components/model.html
nawet w dziale download jest mój program ze zrobionym usuwaniem wierszy i dodawanie(jak pamiętam myszką wybierałeś który wiersz), ale zrób na podstawie dokumentacji i innych przykładów nie jest to trudne

0

A czy mógłbyś podać linka do tego przykładowego programu?

0

Podepnij pod tabele ktora dziedziczy po AbstractTableModel MouseListenera, i na MousePressed zwracaj sobie wiersz metodą getSelectedRow();

0

Dobra teraz dziedzicze AbstractTableModel interesuje mnie metoda remove row czyli usuwanie wierszy. W którym momencie powinienem dodac JButtony? I jak zrobić żeby usuwał wybrany wiersz? Za pomocą Mouse Listenera? Ale jak?

Pozdro

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TableDemo extends JPanel {

public TableDemo() {
    super(new GridLayout(1,0));

    JTable table = new JTable(new MyTableModel());
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);


    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane);



}

class MyTableModel extends AbstractTableModel {
    private String[] columnNames = {"Imie",
                                    "Nazwisko"};
    private Object[][] data = {
        {"Basia", "XX",
         },
        
    };
    

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

  
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }


}
public void removeRow(int row){
	
	
}


private static void createAndShowGUI() {

    JFrame frame = new JFrame("TableDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    TableDemo newContentPane = new TableDemo();
    newContentPane.setOpaque(true); 
    frame.setContentPane(newContentPane);


    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}

0

Przerobiona pierwsza wersja programu z dodawaniem i usuwaniem wybranego wiersza. Jestem początkujący więc na pewno nie jest to najlepsze rozwiązanie ale działa.

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.table.DefaultTableModel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TableDemo extends JPanel {
	public TableDemo() {
		super(new GridLayout(1, 0));

		String[] columnNames = { "Data", "Waga", };

		Object[][] data = { { "0", "0" }, { "0", "0" }, };

		final DefaultTableModel tab = new DefaultTableModel(data, columnNames);
		final JTable table = new JTable(tab);
		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
		table.setFillsViewportHeight(true);

		JScrollPane scrollPane = new JScrollPane(table);

		add(scrollPane);

		JButton mb = new JButton("Dodaj");
		mb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Object[] dd = { JOptionPane.showInputDialog(null, "Podaj date"), JOptionPane.showInputDialog(null, "Podaj wage") };
				tab.addRow(dd);
			}
		});
		mb.setPreferredSize(new Dimension(80, 20));
		add(mb, BorderLayout.SOUTH);

		JButton mc = new JButton("Usuń");
		mc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tab.removeRow(table.getSelectedRow());
			}
		});
		mc.setPreferredSize(new Dimension(80, 20));
		add(mc, BorderLayout.SOUTH);
	}

	// GUI
	private static void createAndShowGUI() {

		JFrame frame = new JFrame("TableDemo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		TableDemo newContentPane = new TableDemo();
		newContentPane.setOpaque(true);
		frame.setContentPane(newContentPane);

		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {

		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}
0

Witam wszystkich ;) też jestem zielony jeżeli chodzi o jave. Mam pytanie co do tego kodu. Też go przerobiłem trochę na swój sposób. Dodałem liczbę porządkową(nie do konca sprawną:P) i wystarczy wpisać numer wiersza który ma być usunięty. co prawda wersja Krzysia jest o wiele lepsza i wygodniejsza ale też sie pochwale niewielką przeróbką ;P. jest jedno ale... jak by można było odświeżyć Lp. po usunięciu wiersza??

import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Main extends JPanel {
        private boolean DEBUG = false;

        public Main() {
              

                String[] columnNames = { "Lp","Data","Waga" };

                Object[][] data = { { "0", "0" }, { "1", "0" }, };

                final DefaultTableModel tab = new DefaultTableModel(data, columnNames);
                final JTable table = new JTable(tab);
                table.setPreferredScrollableViewportSize(new Dimension(1000, 700));
                table.setFillsViewportHeight(true);

                if (DEBUG) {
                        table.addMouseListener(new MouseAdapter() {
                                public void mouseClicked(MouseEvent e) {

                                }
                        });
                }
              JScrollPane scrollPane = new JScrollPane(table);

                add(scrollPane);


                JButton mb = new JButton("Dodaj");
                mb.addActionListener(new ActionListener() {
                    int z = 2;
                        public void actionPerformed(ActionEvent arg0) {

                                Object[] dd = { z, "dodana", };
                                 z++;
                                tab.addRow(dd);
                        }
                }
                );

                mb.setPreferredSize(new Dimension(80, 20));
                add(mb, BorderLayout.EAST);

                final JTextField cos = new JTextField();
                cos.setPreferredSize(new Dimension(80, 20));
                add(cos, BorderLayout.EAST);
                
                JButton mc = new JButton("Usuń");
                mc.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {

               int q = Integer.parseInt(cos.getText());
                                tab.removeRow(q);
                               
                        }
                });
                mc.setPreferredSize(new Dimension(80, 20));
                add(mc, BorderLayout.EAST);

        }

        // GUI
        private static void createAndShowGUI() {

                JFrame frame = new JFrame("Tabela");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

               Main newContentPane = new Main();
                newContentPane.setOpaque(true);
                frame.setContentPane(newContentPane);

                frame.pack();
                frame.setVisible(true);
        }

        public static void main(String[] args) {

                javax.swing.SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                                createAndShowGUI();
                        }
                });
        }


}

0

Witam
Chcę dodać jeszcze obsługę wyjątku żeby wyświetlał coś w stylu brak wiersza do usunięcie (ArrayIndexOutOfBoundsException) Co powinno być po otwarciu bloku try{.. jak zapisać że wartość tablicy = 0? I czy w dobrym miejscu wrzucilem obsługę wyjatku?(zaznaczone na czerwono

Pozdro

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.table.DefaultTableModel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TableDemo extends JPanel {
public TableDemo() {
super(new GridLayout(1, 0));

            String[] columnNames = { "Imię", "Nazwisko","Pensja" };

            Object[][] data = { };

            final DefaultTableModel tab = new DefaultTableModel(data, columnNames);
            final JTable table = new JTable(tab);
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            table.setFillsViewportHeight(true);

            JScrollPane scrollPane = new JScrollPane(table);

            add(scrollPane);

            JButton mb = new JButton("Dodaj");
            mb.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                            Object[] dd = { JOptionPane.showInputDialog( null,"Podaj imię"), JOptionPane.showInputDialog(null, "Podaj nazwisko"),
                            		JOptionPane.showInputDialog(null, "Podaj pensję"),  };
                            tab.addRow(dd);
                            
                    }
            });
            mb.setPreferredSize(new Dimension(20, 5));
            add(mb, BorderLayout.SOUTH);

            JButton mc = new JButton("Usuń");
            mc.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                            tab.removeRow(table.getSelectedRow());
                    }
            });
            mc.setPreferredSize(new Dimension(80, 20));
            add(mc, BorderLayout.NORTH);

try{

            	 }
            	 catch(ArrayIndexOutOfBoundsException e){
            	 System.out.println("brak wierszy");
            	 }
            	 }
            	
    </span>

    // GUI
    private static void createAndShowGUI() {

            JFrame frame = new JFrame("TableDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            TableDemo newContentPane = new TableDemo();
            newContentPane.setOpaque(true);
            frame.setContentPane(newContentPane);

            frame.pack();
            frame.setVisible(true);
    }

    public static void main(String[] args) {

            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                            createAndShowGUI();
                    }
            });
    }

}

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