如何在java中更改选项卡标签的宽度,但保持;选择“;选择权

如何在java中更改选项卡标签的宽度,但保持;选择“;选择权,java,html,swing,jtabbedpane,Java,Html,Swing,Jtabbedpane,我的程序中有一个JTabbedPane对象,我覆盖getForegroundAt和getBackgroundAt方法,以便在选择或不选择选项卡时具有不同的背景色。我想更改选项卡的宽度和高度。我使用如下类似的代码实现了这一点: jtp.addTab("<html><body><table width='200'>Main</table></body></html>", mainPanel); jtp.addTab(“主”,

我的程序中有一个
JTabbedPane
对象,我覆盖
getForegroundAt
getBackgroundAt
方法,以便在选择或不选择选项卡时具有不同的背景色。我想更改选项卡的宽度和高度。我使用如下类似的代码实现了这一点:

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

问题是,如果我使用此html代码更改选项卡的宽度,我覆盖的方法将不再被调用,因为选项是用html代码设置的。有办法解决这个问题吗?是否有html代码,我可以使用它来改变标签的背景颜色,这取决于它是否被选中?谢谢。

这里有一种通过覆盖JTabbedPane的UI中的calculateTabWidth(…)来更改选项卡宽度的方法:

编辑:程序员的评论是正确的。我已经将示例从
BasicTabbedPaneUI
更改为
metaltabedPaneUI
,因为这是用于此示例的默认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);
  }
}

只要您意识到这将完全破坏当前安装的外观