gpt4 book ai didi

java - 如何将关闭按钮添加到 JTabbedPane 选项卡?

转载 作者:IT老高 更新时间:2023-10-28 21:14:33 46 4
gpt4 key购买 nike

我正在使用 JTabbedPane,我需要在选项卡中添加一个关闭按钮来关闭当前的。

我一直在搜索,据我了解,我必须从 JPanel 扩展并添加关闭按钮,正如他们所说的 here但是,有没有办法添加扩展 JTabbedPane 的关闭按钮,或者有更简单的方法吗?

在此先感谢您,非常感谢您的时间和帮助。

最佳答案

基本上,您需要为选项卡提供“渲染器”。看看JTabbedPane.setTabComponentAt(...)了解更多信息。

基本思想是提供一个将在选项卡上布局的组件。

我通常会创建一个 JPanel,在其上添加一个 JLabel(用于标题),并且根据我想要显示的内容,添加一些充当关闭操作的控件。

tabPane.addTab(title, tabBody);
int index = tabPane.indexOfTab(title);
JPanel pnlTab = new JPanel(new GridBagLayout());
pnlTab.setOpaque(false);
JLabel lblTitle = new JLabel(title);
JButton btnClose = new JButton("x");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;

pnlTab.add(lblTitle, gbc);

gbc.gridx++;
gbc.weightx = 0;
pnlTab.add(btnClose, gbc);

tabPane.setTabComponentAt(index, pnlTab);

btnClose.addActionListener(myCloseActionHandler);

现在在其他地方,我建立了 Action 处理程序...

public class MyCloseActionHandler implements ActionListener {

public void actionPerformed(ActionEvent evt) {

Component selected = tabPane.getSelectedComponent();
if (selected != null) {

tabPane.remove(selected);
// It would probably be worthwhile getting the source
// casting it back to a JButton and removing
// the action handler reference ;)

}

}

}

现在,您可以轻松使用任何您喜欢的组件,并为其附加鼠标监听器并监控鼠标点击...

更新

上面的例子只会删除当前 Activity 的标签,有几种方法可以解决这个问题。

最好的办法是为操作提供一些方法来查找与其关联的选项卡...

public class MyCloseActionHandler implements ActionListener {

private String tabName;

public MyCloseActionHandler(String tabName) {
this.tabName = tabName;
}

public String getTabName() {
return tabName;
}

public void actionPerformed(ActionEvent evt) {

int index = tabPane.indexOfTab(getTabName());
if (index >= 0) {

tabPane.removeTabAt(index);
// It would probably be worthwhile getting the source
// casting it back to a JButton and removing
// the action handler reference ;)

}

}

}

这使用选项卡的名称(与 JTabbedPane#addTab 一起使用)来查找并删除选项卡及其相关组件...

关于java - 如何将关闭按钮添加到 JTabbedPane 选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11553112/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com