Как убрать серую тень вокруг всплывающих окон и всплывающих подсказок? - PullRequest
0 голосов
/ 25 декабря 2018

Я попытался удалить теневую границу вокруг всплывающих окон и всплывающих подсказок, изменив LookAndFeel и создав пользовательские всплывающие подсказки для компонентов - но ни один из этих способов не работает.

Один из подходов, который я использовал, это составная граница с указанными внешними и внутренними границами.

Первый в LaF:

Border border = BorderFactory.createLineBorder(Color.BLUE, 1);
Border margin = new EmptyBorder(10,10,10,10);
UIManager.getDefaults().put("ToolTip.border",new CompoundBorder(border, margin))

Второй с помощью переопределения createToolTip () в конкретном компоненте:

@Override
public JToolTip createToolTip() {
    JToolTip tip = super.createToolTip();
    tip.setBackground(Colors.BLUE_TINT_LIGHT);
    tip.setForeground(Colors.TEXT_DARK_STEEL);
    Border border = BorderFactory.createLineBorder(Color.BLUE, 1);
    Border margin = new EmptyBorder(10,10,10,10);
    tip.setBorder(new CompoundBorder(border, margin));
    return tip;
}

1 Ответ

0 голосов
/ 26 декабря 2018

В разделе LaF есть инициализация ShadowPopupBorder , которая используется для всплывающих подсказок, всплывающих окон и границ модальных диалогов.Я изменил paintBorder и добавил дополнительную проверку, если объект компонента является экземпляром класса JTooltip - работает сейчас.

/**
 * Paints the border for the specified component with the specified
 * position and size.
 */
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
    // fake drop shadow effect in case of heavy weight popups
    JComponent popup = (JComponent) c;
    Image hShadowBg = (Image) popup.getClientProperty(ShadowPopupFactory.PROP_HORIZONTAL_BACKGROUND);
    if (hShadowBg != null) {
        g.drawImage(hShadowBg, x, y + height - 5, c);
    }
    Image vShadowBg = (Image) popup.getClientProperty(ShadowPopupFactory.PROP_VERTICAL_BACKGROUND);
    if (vShadowBg != null) {
        g.drawImage(vShadowBg, x + width - 5, y, c);
    }

    // draw drop shadow
    g.drawImage(shadow, x +  5, y + height - 5, x + 10, y + height, 0, 6, 5, 11, null, c);
    g.drawImage(shadow, x + 10, y + height - 5, x + width - 5, y + height, 5, 6, 6, 11, null, c);
    g.drawImage(shadow, x + width - 5, y + 5, x + width, y + 10, 6, 0, 11, 5, null, c);
    g.drawImage(shadow, x + width - 5, y + 10, x + width, y + height - 5, 6, 5, 11, 6, null, c);
    g.drawImage(shadow, x + width - 5, y + height - 5, x + width, y + height, 6, 6, 11, 11, null, c);
}
...