2014-11-05 79 views
2

我的主類擴展了JPanel,我在這個面板上創建了一個表和一個按鈕。現在我想在用戶按下時關閉這個面板。在互聯網上關閉的例子是關於JFrame的。 JPanel的解決方案?Swing如何以編程方式關閉JPanel

  • 有一個面板
  • 在面板裏有一張桌子和一個按鈕
  • 我添加一個動作監聽按鈕
  • 我要關閉面板,如果用戶按下按鈕
  • 這是我的代碼現在我想,當用戶按下btnDelete然後將其關閉面板

    公共類ListUsers擴展JPanel {

    ResultSet rs;ClientDAO dao; JScrollPane scrollPane; JTable表; 對象columnId;

    公共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); 
    
+4

您可以隱藏它。 'setVisible(false)' – forgivenson 2014-11-05 16:38:54

+0

我setVisible(false)但面板仍然可見只是面板上的項目消失。 – 2014-11-05 16:46:17

+0

也許你應該向我們提供一些產生問題的代碼。編輯您的問題並將其添加到那裏。沒有更多細節,很難進一步提供幫助。 – forgivenson 2014-11-05 16:49:56

回答

5

如果你想 '關閉' 一個JPanel,你可以將其隱藏。

myPanel.setVisible(false); 

如果/當你想「開放」一遍:

myPanel.setVisible(true); 
+0

在這種情況下,面板將繼續在後臺運行。 – 2016-01-21 21:52:30

2

假設你想,當你按下按鈕關閉你的Swing應用程序。你可以使用:

System.exit(0);

+0

它可以工作,但我不想關閉整個應用程序。 – 2014-11-05 17:02:51

+0

@Harunergül爲什麼你選擇這個答案是正確的,如果它不適合你。 – 2016-01-21 21:54:34

1

您可以嘗試使用Frame.pack()再次它爲我工作。

+0

或嘗試以下方法之一: setOpaque(false); setEnabled(false); setVisible(false); removeAll(); – AXL 2017-01-17 11:33:52

+0

希望能幫助別人,那段時間對我來說非常有用 – AXL 2017-01-17 14:47:55