gpt4 book ai didi

java - 如何更改java中选项卡标签的宽度但保留 "selection"选项

转载 作者:行者123 更新时间:2023-11-30 03:56:13 24 4
gpt4 key购买 nike

我的程序中有一个 JTabbedPane 对象,并且我重写了 getForegroundAtgetBackgroundAt 方法,以便在选项卡时具有不同的背景颜色是否被选中。我想更改选项卡的宽度和高度。我设法使用类似于以下的代码来做到这一点:

 jtp.addTab("<html><body><table width='200'>Main</table></body></html>", mainPanel);

问题是,如果我使用此 html 代码来更改选项卡的宽度,则不会再调用我重写的方法,因为选项是使用 html 代码设置的。有办法解决这个问题吗?是否有 html 代码可以用来根据是否选择选项卡来更改选项卡的背景颜色?谢谢。

最佳答案

下面是通过重写 JTabbedPane UI 中的calculateTabWidth(...) 来更改选项卡宽度的一种方法:

编辑:MadProgrammer 的评论是正确的。我已将示例从 BasicTabbedPaneUI 更改为 MetalTabbedPaneUI,因为这是此示例使用的默认 UI。如果您为应用程序指定特定的 L&F,请相应地更改 UI。

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

public class CustomTabWidthDemo implements Runnable
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new CustomTabWidthDemo());
}

public void run()
{
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.setUI(new MetalTabbedPaneUI()
{
@Override
protected int calculateTabWidth(int tabPlacement, int tabIndex,
FontMetrics metrics)
{
int width = super.calculateTabWidth(tabPlacement, tabIndex, metrics);
int extra = tabIndex * 50;
return width + extra;
}
});

tabbedPane.addTab("JTable", new JScrollPane(new JTable(5,5)));
tabbedPane.addTab("JTree", new JScrollPane(new JTree()));
tabbedPane.addTab("JSplitPane", new JSplitPane());

JPanel p = new JPanel();
p.add(tabbedPane);

JFrame frame = new JFrame();
frame.setContentPane(p);
frame.pack();
frame.setVisible(true);
}
}

关于java - 如何更改java中选项卡标签的宽度但保留 "selection"选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120971/

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