gpt4 book ai didi

java - 更改字体时 JTabbedPane 选项卡标题保留填充

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:11 25 4
gpt4 key购买 nike

我正在编写一个自定义BasicTabbedPaneUI,我已经覆盖了paintText并更改了其中的fontSize,但这在选项卡右侧留下了不需要的额外填充。

enter image description here

正如你所看到的,填充相当大,我希望它与左侧的填充相同。这是我的代码

import sun.swing.SwingUtilities2;

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

public class UITest {

public static void main(String[] args) {
JFrame jFrame = new JFrame();
JTabbedPane jTabbedPane = new JTabbedPane();
jTabbedPane.add(new JPanel(), "This is a test title");
jTabbedPane.add(new JPanel(), "This is also a test title");
jTabbedPane.setUI(new LynxTabbedPane());
jFrame.setContentPane(jTabbedPane);
jFrame.setSize(300, 100);
jFrame.setVisible(true);
}

public static class LynxTabbedPane extends BasicTabbedPaneUI {

@Override
protected void paintText(Graphics g, int tabPlacement, Font font, FontMetrics metrics, int tabIndex, String title, Rectangle textRect, boolean isSelected) {

Font myFont = new Font(font.getFontName(), Font.BOLD, 10);
g.setFont(myFont);
g.setColor(Color.WHITE);

SwingUtilities2.drawStringUnderlineCharAt(tabPane,
g, title,
tabPane.getDisplayedMnemonicIndexAt(tabIndex),
textRect.x, metrics.getAscent() + 2);
}
}
}

我本以为我需要计算 tabWidth,所以我尝试覆盖它并从中减去 5,但是,但它没有改变,所以现在我一无所知。

        @Override
protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
return super.calculateTabWidth(tabPlacement, tabIndex, metrics) - 5;
}

最佳答案

最终在 JTabbedPane 对象上使用 setFont,因为它会自动处理选项卡的大小

    Font myFont = new Font(tabbedPane.getFont().getFontName(), Font.BOLD, 10);
tabbedPane.setFont(myFont);

关于java - 更改字体时 JTabbedPane 选项卡标题保留填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53348137/

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