繁体   English   中英

BasicTabbedPaneUI聚焦时显示边框

BasicTabbedPaneUI showing border when focused

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试通过扩展BasicTabbedPaneUI来制作自定义TabbedPaneUI

我在设置TextColor时遇到问题,每当设置TextColor时,当窗格被聚焦并启用时,它都会显示边框。

在此处输入图片说明

如您所见,具有标题“ Test已启用/已选择窗格”的窗格,其周围有白色边框,我不希望使用该边框。 我已经覆盖了paintTabBorder

@Override
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected) {
    //We do nothing here to disable painting the Tab Border
}

这是我重写paintText以更改文本颜色的方法

@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
        v.paint(g, textRect);
    } else {
        // plain text
        int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);

        if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {

            //Change the text to White here <- Causing Border Issues
            g.setColor(Color.WHITE);

            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);

        }
    }
}

g.setColor(Color.WHITE); 是造成边框问题的原因,我通过将“颜色”设置为其他颜色而不是“白色”来确认了这一点,并且边框和文本一样都是该颜色。

2 个回复

只需用背景颜色绘制另一个空标题即可有效隐藏边框。

@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
        v.paint(g, textRect);
    } else {
        // plain text
        int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex);

        if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) {

            //Change the text to White here
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

            //Remove Border Issues
            g.setColor(tabPane.getBackgroundAt(tabIndex).darker());

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    "", mnemIndex,                                 //<-- empty title here
                    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);

        }
    }
}

经过一些研究,我想出了解决边框问题的方法,在绘制String后必须设置图形颜色。 g.setColor(selectColor);

            //Change the text to White here <- Causing Border Issues
            g.setColor(Color.WHITE);

            SwingUtilities2.drawStringUnderlineCharAt(tabPane, g,
                    title, mnemIndex,
                    textRect.x, textRect.y + metrics.getAscent());

            //reset the color to selectedColor
            g.setColor(selectColor);
1 聚焦标签显示虚线作为边框

我正在以编程方式将焦点发送到WPF标签。 但是,当我这样做时,标签周围会出现虚线。 我不相信这是边框画笔,特别是因为我明确地将它设置为透明。 有谁知道我怎么能摆脱这条虚线/虚线? 如果有帮助,则破折号仅出现在左侧和右侧。 并且,标签位于StackPanel内。 ...

3 单击/聚焦时删除输入元素的边框

我为输入元素设置了边框和边框半径。 当您在输入标签内聚焦时,会出现一个几乎没有边框半径的蓝色边框。 当您单击 input[type=submit] 元素时,也会发生同样的情况。 我想定义和控制这些属性。 我认为有一个 css 技巧可以解决这个问题,但我不确定。 我是更改 box-shadow 属性 ...

2016-07-06 22:48:33 1 2117   css
4 聚焦edittext时更改边框颜色

我想知道如何在聚焦时更改edittext的边框颜色,此时它看起来像这样: 我已经尝试在SDK中检查源图片,但我对它没有任何意义,我也尝试过使用xml,但是无法仅更改边框颜色。 如果我找到源图片,我可以在photoshop中编辑以更改颜色,有关如何执行此操作或源图片位于何处的提示? ...

5 在jQuery中聚焦时如何更改边框标签

我有一张图片清单。 当选择图像时,我有一个JQuery使其边框=&gt;可以。 但是现在我想在边框失去焦点时删除边框,我使用跟随代码,但是不起作用。 有人知道如何解决吗? 更新我的意思是,当我选择一个图像时,该图像是加粗的,而当我选择另一个图像时,我想要的是第一个图像将隐藏边 ...

7 当*不*聚焦时移除JavaFX ScrollPane滚动条周围的边框

我有一个奇怪的问题。 我已经使用 CSS 在 JavaFX 中对 ScrollPane 的滚动条进行了样式设置,但是现在每次 ScrollPane处于焦点时,边框都会消失。 但是,如果我单击窗格外的按钮,它会返回。 以下是图片: 不专心 专注 这是CSS: .scroll-bar:ho ...

8 如何添加边框以聚焦CSS

我想添加样式输入文本框,该文本框在单击时具有红色边框,而在单击时则没有边框。 我曾尝试设置input:active样式,但问题是当您单击鼠标时,红色边框仍然存在。 而不是input:active我不会操纵input:focus像这样有一个红色边框 有没有办法做到这一点? ...

9 聚焦按钮无边框

嘿,我从javaFX开始。 我在网上发现了自定义按钮的CSS代码,但是单击按钮时,边框丢失了(香草蓝色边框)。 我想把它找回来。 这不起作用: ...

10 Flutter TextFormField 聚焦边框颜色

这是我的主题: 在过去,如果您将主要颜色设置为绿色,则在颤动的过去,焦点文本字段的边框也会变成绿色。 现在,我希望我的所有文本字段在聚焦时都具有绿色边框、绿色前缀图标和绿色标签文本,所有这些都来自根主题。 但这是我用上面的代码得到的结果: 我希望锁、“密码”标签和边框在聚焦时全部为绿色,未聚 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM