- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码段,其中将自定义面板添加到 JTaskPane。该 Pane 有一个标签,当我单击它时该标签会被删除。但是,我的自定义面板没有被删除。如何单击面板中的叉号将其删除?
以下是快照。因此,在这种情况下,我可以删除“关闭”JLabel,但当我单击“十字”符号时无法删除紫色标签
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import org.jdesktop.swingx.JXTaskPane;
public class Test {
private SRLSearchPanel panel = new SRLSearchPanel();
class SRLSearchPanel extends JPanel {
private JXTaskPane filterPanel = new JXTaskPane();
private JTextField searchField = new JTextField(20);
public SRLSearchPanel() {
setLayout(new BorderLayout());
final JLabel lbl = new JLabel("Close");
filterPanel.add(lbl);
lbl.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
filterPanel.remove(lbl);
filterPanel.revalidate();
}
});
filterPanel.add(searchField);
add(filterPanel, BorderLayout.WEST);
searchField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FilterBox filterBox = new FilterBox(searchField.getText());
filterPanel.add(filterBox);
}
});
}
public void removeFilter(FilterBox filterBox) {
filterPanel.remove(filterBox);
}
}
class FilterBox extends JPanel {
private static final int PADDING = 2;
private static final String PAD_STR = " ";
private JLabel filterLbl = new JLabel();
private JButton closeBtn = new JButton("X");
public FilterBox(String label) {
filterLbl.setText(PAD_STR + label + PAD_STR);
closeBtn.setBorderPainted(false);
closeBtn.setFocusPainted(false);
closeBtn.setContentAreaFilled(false);
closeBtn.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
System.err.println("Adding action listener "
+ FilterBox.this.hashCode());
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.removeFilter(FilterBox.this);
}
});
this.setLayout(new BorderLayout());
this.add(filterLbl, BorderLayout.WEST);
this.add(closeBtn, BorderLayout.EAST);
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.err.println("Removing filter");
panel.filterPanel.remove(FilterBox.this);
}
});
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(new Color(0f, 0f, 1f, 0.3f));
g.fillRoundRect(0, 0, this.getWidth(), this.getHeight() - PADDING,
20, 20);
g.setColor(Color.BLACK);
}
}
public static void main(String[] args) {
Test i = new Test();
i.testRun();
}
public void testRun() {
final JFrame frame = new JFrame();
SRLSearchPanel spanel = new SRLSearchPanel();
frame.add(spanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(800, 800));
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
});
}
}
最佳答案
您遇到了上下文问题。
首先创建 SRLSearchPanel
的实例变量
private SRLSearchPanel panel = new SRLSearchPanel();
这由您的FilterBox
使用
但是随后您创建了另一个实例...
SRLSearchPanel spanel = new SRLSearchPanel();
frame.add(spanel);
这是实际在屏幕上的内容,因此与面板
交互没有任何效果,因为它与您实际放置在屏幕上的内容没有关系
相反,您可以尝试简单地请求将 FilterBox
从其父级中删除...
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getParent().remove(FilterBox.this);
}
});
关于java - 如何从 JXTaskPane 中删除组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540308/
我正在使用 JXTaskPane 组件。我想知道是否可以更改任务 Pane 顶部的尺寸,即显示任务 Pane 标题的区域。如果是,请告诉我怎么做? 最佳答案 不,不支持:“顶部区域”是 Border
所以我有 3 个可折叠的 JXTaskPanes,我想做的只是一次只显示一个任务 Pane ,即如果用户单击任务 Pane #1,则 #2 和 #3 会折叠,而 #1 会展开等。 我无法将 Actio
我有以下代码段,其中将自定义面板添加到 JTaskPane。该 Pane 有一个标签,当我单击它时该标签会被删除。但是,我的自定义面板没有被删除。如何单击面板中的叉号将其删除? 以下是快照。因此,在这
是否有一种方法可以将 JXTaskPane 设置为默认折叠状态?或者你能给我一些关于如何制定我需要的方法的想法吗? 最佳答案 方法.setCollapsed(true) 会将 JXTaskPane 设
Java Swing 中使用的JXTaskPane 有一个标题栏。其中有一个展开/缩小按钮。我希望能够在出现在旁边的标题栏中添加我自己的操作展开/缩小按钮。 我该怎么做?我自己尝试了很多次,但没有得到
我正在使用 JxTaskPane 添加菜单项..但我不想使用它,因为我不想要那种展开和折叠类型的容器..我只想水平排列我的菜单项。 如果我将其添加到面板,我将无法向其添加操作,因为 JxTaskPan
我在循环显示任务 Pane 时遇到问题。我有一个代码来获取名册组(组: friend - 企业 - 公司等)我的代码是: Roster rost = xmppcon.getRoster(); Coll
我写了下面的示例代码: import org.jdesktop.swingx.*; import javax.swing.*; import java.awt.*; public class Task
我是 SwingX 新手,在使用 Netbeans 6.9.1 的 Pallete 管理器使用 JXCollapsiblePane 和 JXTaskPane 时遇到问题具体来说: 对于JXTaskPa
我是一名优秀的程序员,十分优秀!