动态添加和隐藏JLayeredPane

时间:2010-08-14 20:50:09

标签: java swing

我想在运行时动态添加/隐藏/删除jlayeredpanes,并且还应该在选择另一个窗格时隐藏每个窗格上的内容。我尝试了以下代码,我不知道该怎么做。选择备用窗格时,以下代码会隐藏每个窗格的内容,但不会不断隐藏其内容。当我们鼠标移动到隐藏的内容区域时,它们会再次可见。 Plz帮帮我!!

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);
                }

1 个答案:

答案 0 :(得分: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);
    }
});