Swing如何以编程方式关闭JPanel

Har*_*GUL 3 java swing

我的主要类扩展了JPanel,我在这个面板上创建了一个表和一个按钮.现在我想在用户按下它时关闭这个面板.在互联网上关闭的例子是JFrame.Is解决方案是JPanel吗?

  • 有一个小组
  • 在面板上有一个表和一个按钮
  • 我为按钮添加了一个动作监听器
  • 如果用户按下按钮,我想关闭面板
  • 这是我的代码现在我想要当用户按下btnDelete然后关闭面板

    公共类ListUsers扩展JPanel {

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

    public ListUsers()抛出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);
    
    Run Code Online (Sandbox Code Playgroud)

for*_*son 6

如果你想"关闭"JPanel,你可以隐藏它.

myPanel.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

如果/当你想再次"打开"时:

myPanel.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,面板将继续在后台运行. (2认同)

Lef*_*Bab 5

public void actionPerformed(ActionEvent e) {
  JComponent comp = (JComponent) e.getSource();
  Window win = SwingUtilities.getWindowAncestor(comp);
  win.dispose();
}
Run Code Online (Sandbox Code Playgroud)

e.getSource():获取Java Component

getWindowAncestor:返回的第一个Window 祖先Component

win.dispose():释放此组件及其子组件使用的所有本机屏幕资源,以及其所有拥有的子代。