gpt4 book ai didi

java - 如何扩展 JTabbedPane 以始终具有 "Add Tab"选项卡?

转载 作者:行者123 更新时间:2023-11-30 08:23:54 25 4
gpt4 key购买 nike

我正在尝试创建一个 JTabbedPane,以便最终的“选项卡”实际上是一个按钮,它将打开一个对话框以向选项卡式 Pane 添加内容。我尝试查看 JTabbedPane 的源代码,但我找不到选项卡对象(单击时更改当前可见组件的可单击“按钮”行)的实际位置。有一个 Page 对象的私有(private)列表(因此它们无论如何都不能被子类访问)但它们只包含有关选项卡的信息而不是选项卡对象本身。我的目标是能够在选项卡列表(水平)之后添加一个按钮。

我还尝试使用 JTabbedPane.setTabComponentAt() 将最终选项卡的字符串更改为组件为 null 的 JButton,但这仍然会添加选项卡组件。如果您稍微单击选项卡中按钮的右侧/左侧,将显示一个空白选项卡,因为组件周围总是有填充。也许有办法摆脱这个?但我想在一些外观和感觉中有这样的标签:/---\而不是:|---|您仍然可以单击选项卡,但不能单击按钮。

有谁知道我如何在不编写自己的 JTabbedPane 版本的情况下获得我正在寻找的东西?

谢谢!

最佳答案

My goal is to be able to add a button that comes after the tab list (horizontally).

正确的解决方案是编写自定义 UI,但这可能很复杂,而且我不确定要更改哪些代码。

作为一个简单的 hack,您可以使用一个带有 OverlayLayout 的面板来在选项卡式 Pane 的顶部/右侧显示按钮:

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

public class TabbedPaneWithComponent
{
private static void createAndShowUI()
{
JPanel panel = new JPanel();
panel.setLayout( new OverlayLayout(panel) );

JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("1", new JTextField("one"));
tabbedPane.add("2", new JTextField("two"));
tabbedPane.setAlignmentX(1.0f);
tabbedPane.setAlignmentY(0.0f);

JCheckBox checkBox = new JCheckBox("Check Me");
checkBox.setOpaque( false );
checkBox.setAlignmentX(1.0f);
checkBox.setAlignmentY(0.0f);

panel.add( checkBox );
panel.add(tabbedPane);

JFrame frame = new JFrame("TabbedPane With Component");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.setLocationByPlatform( true );
frame.setSize(400, 100);
frame.setVisible( true );
}

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

效果很好,除非选项卡式 Pane 的宽度变得太小并且按钮与选项卡重叠。

关于java - 如何扩展 JTabbedPane 以始终具有 "Add Tab"选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329805/

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