BasicTabbedPaneUI рисует HTML-текст - PullRequest
0 голосов
/ 26 октября 2011

Я бы расширил BasicTabbedPaneUi, чтобы я мог создать свою собственную панель вкладок. У меня есть одна проблема с текстом HTML, это установить цвет текста после выбора вкладки. Я переопределяю метод paintText с помощью следующего, почти такого же кода, что и метод orignal:

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

    View v = getTextViewForTab(tabIndex);
    if (v != null) {
        // html
        Color fg = tabPane.getForegroundAt(tabIndex);
        if (isSelected && (fg instanceof UIResource)) {
            Color selectedFG = UIManager.getColor(
                    "TabbedPane.selectedForeground");
            if (selectedFG != null) {
                fg = selectedFG;
            }
        }
        v.paint(g, textRect);
    } else {
        // plain text
        int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);

        if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {
            Color fg = tabPane.getForegroundAt(tabIndex);
            if (isSelected && (fg instanceof UIResource)) {
                Color selectedFG = UIManager.getColor(
                        "TabbedPane.selectedForeground");
                if (selectedFG != null) {
                    fg = selectedFG;
                }
            }
            g.setColor(fg);
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

        } else { // tab disabled
            g.setColor(tabPane.getBackgroundAt(tabIndex).brighter());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());
            g.setColor(tabPane.getBackgroundAt(tabIndex).darker());
            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x - 1, textRect.y + metrics.getAscent() - 1);

        }
    }
}

В случае, если у нас есть html-текст для вкладки, он не равен нулю. Если я устанавливаю цвет для графического объекта, используемого в методе рисования, это не меняет цвет текста. Я использую HTML, потому что я хочу, чтобы текст моей вкладки был в две строки. Спасибо за помощь в изменении цвета.

1 Ответ

1 голос
/ 26 октября 2011

Я бы не хотел разрабатывать кастом TabbedPaneUI, если бы он не был частью полной имплементации Look & Feel.

Вместо этого рассмотрим пользовательский компонент с вкладками, как показано в TabComponentsDemo и описано в Как использовать панели с вкладками . Это даст вам полный контроль над внешним видом компонента, не жертвуя совместимостью с выбранным пользователем внешним видом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...