2010-08-14 219 views
1

我想在運行時動態地添加/隱藏/刪除jlayeredpanes,並且在另一個窗格被選中時應隱藏每個窗格上的內容。我試過下面的代碼,我不知道如何做到這一點。以下代碼隱藏每個窗格的內容,當選擇了備用窗格時,它不會不斷地隱藏其內容。當我們將鼠標移動到隱藏的內容區域上時,它們會再次變爲可見。 Plz幫我解決這個問題!動態添加和隱藏JLayeredPane

public class floorsetup { 

    public static void createfloor(String name) 
    { 
     String name1=name+"_pane"; 
     JButton b = new JButton(name); 
     final JLayeredPane jp = new JLayeredPane(); 
     jp.setName(name1); 
     floor_plan.dynamicPane_floors.put(name1, jp); 

     //jp.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); 
     jp.setAutoscrolls(true); 
     jp.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); 
     jp.setMinimumSize(new java.awt.Dimension(1000, 700)); 
     jp.setOpaque(true); 
     jp.setBounds(floor_plan.ground.getBounds()); 
     floor_plan.jLayeredPane2.add(jp); 
     jp.addMouseListener(new java.awt.event.MouseAdapter() { 
      @Override 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
       //floor_plan.jLayeredPane2.setVisible(false); 

       int x = 0,y = 0; 
     //ComponentOrientation componentOrientation = jLayeredPane2.getComponentOrientation(); 
     // Rectangle bounds = jLayeredPane2..getBounds(); 
     // x=bounds.x; 
     //y=bounds.y; 

     //System.out.println(bounds); 

     x=evt.getX(); 
     y=evt.getY(); 
     System.out.println(x); 
     System.out.println(y); 
     // String name=floor_plan.table_name.getText(); 
     String name="some name"; 
     if(floor_plan.delete!=1) 
     tablesetup.addButton(name,x,y, (JLayeredPane) evt.getSource()); 
     System.out.println((evt.getSource())); 
      } 
     }); 

    b.setActionCommand(name); 
    b.setAlignmentX(Component.CENTER_ALIGNMENT); 
    b.setPreferredSize(new Dimension(125, 25)); 
    b.setBackground(Color.green); 

    floor_plan.floors.add(b); 
    floor_plan.floors.add(Box.createRigidArea(new Dimension(10, 15))); 
     // b.setSize(125, 25); 
    floor_plan.dynamicButtons_floors.put(name, b); 
     MouseListenerClass M1 = new MouseListenerClass(); 
     MouseClass M2 = new MouseClass(); 
     b.addMouseMotionListener(M1); 
     b.addMouseListener(M2); 
     b.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 

       if(floor_plan.delete==1) 
        { 
         removeButton(evt.getActionCommand()); 
        } 
       else if(floor_plan.edit==1) 
        { 
         String edit_name = JOptionPane.showInputDialog("Name of the button:"); 
         JButton source = (JButton) evt.getSource(); 
         source.setActionCommand(edit_name); 
         source.setText(edit_name); 
         floor_plan.dynamicButtons_floors.put(edit_name, source); 
        } 
       else 
       { 
        String switcher=evt.getActionCommand(); 
        switcher+="_pane"; 
        switch_pane(switcher,evt); 
       } 
      } 
     }); 

    floor_plan.floors.validate(); 

    floor_plan.floors.repaint(); 
    } 
    public static void removeButton(String name) { 


    JButton b = floor_plan.dynamicButtons_floors.remove(name); 
    floor_plan.jLayeredPane2.remove(b); 
    floor_plan.jLayeredPane2.invalidate(); 
    floor_plan.jLayeredPane2.repaint(); 
} 
    public static void switch_pane(String name,ActionEvent evt) 
    { 
     JLayeredPane jp = floor_plan.dynamicPane_floors.get(name); 
     System.out.println(floor_plan.jLayeredPane2); 
     System.out.println(jp); 
     floor_plan.ground.setVisible(false); 
     floor_plan.ground.setEnabled(false); 
     jp.setVisible(true); 
     jp.moveToFront(floor_plan.ground); 

    } 
} 

這是使用getText()的代碼位。但我得到錯誤!

if(floor_plan.delete==1) 
       { 
        JButton source = (JButton) evt.getSource(); 
        int index=floor_plan.floors.getComponentCount(); 
        int val=0; 

       Component[] components = floor_plan.floors.getComponents(); 
       for(int i=0; i<index;i++) 
       { 

        System.out.println(source.getName()); 
        if(components[i].getText().equals(source.getName())) 
        { 
         val=i; 
        } 
       } 
        removeButton(evt.getActionCommand(),val); 
       } 

回答

2

這聽起來像你可能想看看JTabbedPane。這將允許您在每個標籤中包含具有不同內容的多個標籤。當用戶選擇一個選項卡時,僅顯示該選項卡上的內容。

鏈接:

要動態地通過一個按鈕來添加一個標籤,你可以使用類似下面的代碼:

JButton newTabButton = new JButton("Add Tab"); 
newTabButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     JPanel newTab = new JPanel(); 
     newTab.setLayout(null); 
     // Dynamic panel is a JTabbedPane 
     dynamicPanel.addTab(JOptionPane.showInputDialog("Name of tab"), newTab); 
    } 
}); 
+0

葉那是一個好主意.. 但是我們可以像我們爲jbuttons做的那樣添加動態tabbedpanes嗎? – Deepak 2010-08-14 21:02:06

+0

你可以使用JTabbedPane的'addTab()'方法, – jjnguy 2010-08-14 21:04:15

+0

好吧,我會嘗試! – Deepak 2010-08-14 21:11:07