我有一个JPanel
,其中包含n个JXTitledPanel
个。用户应该可以点击JXTitledPanel
并点击删除按钮将其删除。
我的问题是如何知道用户选择的JXTitlePanel
。
here是我程序中的一个屏幕,基本上我希望用户点击“医院”,点击删除,医院表将消失。
答案 0 :(得分:3)
我可能会在正确的装饰位置添加“移除”控件。这样您就可以传递对JXTiltedPane控件的引用
titledPane.addRightDecoration(new MyRemoveControl(titkedPane));
或者这样
答案 1 :(得分:0)
@madprogrammer可能有最简单的答案,但是如果您不想更改应用程序的外观,可以将按钮的actionListener
与mouseListener
组合在一起。
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();
}
}
}
}