动态添加和隐藏JLayeredPane

问题描述:

我想在运行时动态地添加/隐藏/删除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); 
       } 

这听起来像你可能想看看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