5
votes

My main class extends JPanel and I create a table and a button on this panel.Now I want to close this panel when the user press it.On the internet closing examples are about JFrame.Is there solution for JPanel?

  • There is a panel
  • On Panel there is a table and a button
  • I add an action listener to the button
  • I want to close panel if user press button
  • This is my code now I want when the user press the btnDelete then it close the panel

    public class ListUsers extends JPanel {

    ResultSet rs; ClientDAO dao; JScrollPane scrollPane; JTable table; Object columnId;

    public ListUsers() throws SQLException {

    dao = new ClientDAO();
    rs=dao.getUsers();
    ResultSetMetaData md = rs.getMetaData();  
    int columnCount = md.getColumnCount();  
    
    Vector<String> columns = new Vector(columnCount);  
    
    //store column names  
    for(int i=1; i<=columnCount; i++)  
        columns.add(md.getColumnName(i));  
    
    Vector data = new Vector();  
    Vector row;  
    
    //store row data  
    while(rs.next())  
    {  
        row = new Vector(columnCount);  
        for(int i=1; i<=columnCount; i++)  
        {  
            row.add(rs.getString(i));  
        }  
        data.add(row);  
    }  
    
    
    
    
    
    table = new JTable(data, columns);  
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));  
    table.setFillsViewportHeight(true);  
    table.setVisible(true);  
    table.validate();
    table.setEnabled(true);
    add(table);
    
    
    
    
    table.addMouseListener(new MouseAdapter() {
           public void mouseClicked(MouseEvent e) {
    
    
    
    
    
               final JDialog dialog = new JDialog();
               dialog.setSize(300, 200);
               dialog.setLayout(null);
    
    
               columnId = table.getValueAt(table.getSelectedRow(),0);
    
               Integer no = new Integer(columnId.toString());
               final int i =no.intValue();
    
               String columnNo =columnId.toString();
               String name = table.getValueAt(table.getSelectedRow(),1).toString();
               String surname = table.getValueAt(table.getSelectedRow(),2).toString();
               String gender = table.getValueAt(table.getSelectedRow(),3).toString();
    
    
               String labelText ="<html>Name :<b>"+name+"</b><br>Surname :<b>"+surname+"</b><br>Gender :<b>"+gender+"</b></html>";
               JLabel label=new JLabel(labelText);
               label.setVisible(true);
               label.setBounds(10,  10,300, 100);
               dialog.add(label);
    
    
    
               JButton btnUpdate= new JButton("Update");
               btnUpdate.setVisible(true);
               btnUpdate.setBounds(10,100,100,35);
    
    
               JButton    btnDelete= new JButton("Delete");
               btnDelete.setVisible(true);
               btnDelete.setBounds(150,100,100,35);
    
    
    
    
               dialog.add(btnDelete);
               dialog.add(btnUpdate);
    
    
               btnUpdate.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    dialog.setVisible(false);
    
                }
            });
    
    
               btnDelete.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
    
    
    
    
                    try {
                        dao.deleteUser(i);
                    } catch (SQLException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    dialog.setVisible(false);
    
    
                    setVisible(false);
                    System.exit(0);
    
    
    
                }
            });
    
               dialog.setVisible(true);
    
4
You can hide it. setVisible(false)forgivenson
I setVisible(false) however Panel still visible just the items on the panel are disappear.Harun ERGUL
Perhaps you should provide us with some of your code which produces the issue. Edit your question and add it there. Without more details it is hard to help further.forgivenson
Also, do you want to dispose the panel? Are you going to open it again in the same state?Matias Cicero
My ide don't recognize the dispose()Harun ERGUL

4 Answers

7
votes

If you want to 'close' a JPanel, you can hide it.

myPanel.setVisible(false);

And if/when you want to 'open' it again:

myPanel.setVisible(true);
7
votes
public void actionPerformed(ActionEvent e) {
  JComponent comp = (JComponent) e.getSource();
  Window win = SwingUtilities.getWindowAncestor(comp);
  win.dispose();
}

e.getSource(): Get Java Component

getWindowAncestor: Returns the first Window ancestor of Component

win.dispose(): Releases all of the native screen resources used by this its subcomponents, and all of its owned children.

3
votes

Assuming you want to close your swing application when you press the button. You can just use:

System.exit(0);

3
votes

You may try using Frame.pack() again it worked for me.