在JPanel中的JXTitledPanels用户需要能够选择一个并单击删除按钮

时间:2012-08-23 13:13:24

标签: java swing jpanel swingx

我有一个JPanel,其中包含n个JXTitledPanel个。用户应该可以点击JXTitledPanel并点击删除按钮将其删除。

我的问题是如何知道用户选择的JXTitlePanel

here是我程序中的一个屏幕,基本上我希望用户点击“医院”,点击删除,医院表将消失。

screen shot

2 个答案:

答案 0 :(得分:3)

我可能会在正确的装饰位置添加“移除”控件。这样您就可以传递对JXTiltedPane控件的引用

titledPane.addRightDecoration(new MyRemoveControl(titkedPane));

或者这样

答案 1 :(得分:0)

@madprogrammer可能有最简单的答案,但是如果您不想更改应用程序的外观,可以将按钮的actionListenermouseListener组合在一起。

mouseListener部分保存点击的最后一个面板,actionListener只删除mouseListener注册的面板。

这是我编写的一个快速示例 - 它不使用JXTitledPane,但这并不重要,因为它们都在同一层次结构中。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TempProject extends JFrame{

    public TempProject(){
        Box mainContent = Box.createVerticalBox();

        //Create Button
        JButton removePanel = new JButton("RemovePanel");
        RemoveListener listener = new RemoveListener(mainContent);
        removePanel.addActionListener(listener);
        mainContent.add(removePanel);

        //Create Panels
        mainContent.add(getPanel(Color.red, listener));
        mainContent.add(getPanel(Color.orange, listener));
        mainContent.add(getPanel(Color.pink, listener));
        mainContent.add(getPanel(Color.magenta, listener));

        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        setContentPane(mainContent);    
        pack();
        setVisible(true);
    }

    public JPanel getPanel(Color color, RemoveListener l){
        JPanel result = new JPanel();
        result.setBackground(color);
        result.add(new JLabel(color.toString()));
        result.addMouseListener(l);
        return result;
    }

    public static void main(String args[])
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new TempProject();
            }
        });
    }

    public static class RemoveListener extends MouseAdapter implements ActionListener{

        Component lastSelectedComponent = null;
        Container master; //The panel containing the ones being listened to

        public RemoveListener(Container master){
            this.master = master;
        }

        @Override
        public void mouseClicked(MouseEvent arg0) {
            lastSelectedComponent = (Component)arg0.getSource();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if(lastSelectedComponent != null){
                master.remove(lastSelectedComponent);
                master.repaint();
            }
        }

    }

}