Java:Swing 中的 HTML/CSS,内联显示不起作用

Posted

技术标签:

【中文标题】Java:Swing 中的 HTML/CSS,内联显示不起作用【英文标题】:Java: HTML/CSS in Swing, display inline not working 【发布时间】:2011-11-10 19:01:46 【问题描述】:

我正在尝试使用 html/CSS 在 Swing JButton 中显示复杂的字符串。我正在使用 Swing 支持的 CSS1 属性。问题是以下导致按钮标题分成 3 行而不是单行:

javax.swing.JButton("<html><div style='display:inline;'>regular </div><div style='background-color:#336699;color:#fff;display:inline;'>special</div><div style='display:inline;'> regular again");

请注意,上述字符串在浏览器网页中效果很好,生成单行(无换行符):

我尝试使用“float:left”和“display:inline-block” - 这些也没有明显的效果。

有人知道为什么会发生这种情况以及可以做些什么吗? 请限制您对 HTML/CSS 的回答,因为我不希望为此问题实施特殊的 L&F 或类。

【问题讨论】:

【参考方案1】:

传统上&lt;span&gt; 就像&lt;div&gt; 一样,只是它默认为内联显示。我会先尝试一下,然后再搞砸其他事情。

编辑:

好的,所以我玩了一下,下面的 html 对我有用:

"<html>" + 
"regular" +
"<font style='background-color:#336699; color:#fff;'>special</font>" +
"regular again"

【讨论】:

我认为这更像是评论的材料,而不是答案,但我会让它滑动...... 感谢建议,可惜效果一样。 不知道为什么 span 标签不起作用(它应该是 dangit),但 &lt;font&gt; 标签似乎可以完成这项工作。 你两次都是正确的,显然: 也可以,如果你只使按钮足够大。显然,如果按钮太窄,Swing 会自动换行文本。这适用于 但正如我在问题中指出的那样,由于某些奇怪的原因不适用于 。奇怪,但至少现在我们有一个解决方法。再次感谢! 是的,奇怪的是 div 的 css display 属性被忽略了。很高兴它现在对你有用:)【参考方案2】:

1) 您的 Html/Css 语法不适用于 Java6 " 而不是 ',反之亦然

2)请您的问题将基于此SSCCE

图片

代码

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
import org.pushingpixels.trident.Timeline;

public class ButtonFg extends JFrame 

    private static final long serialVersionUID = 1L;

    public ButtonFg() 
        JButton button = new JButton("<html><div style='display:inline;"
                + "'>regular </div><div style='background-color:#336699;"
                + "color:#fff;display:inline;'>special</div>"
                + "<div style='display:inline;'> regular again");
        button.setForeground(Color.blue);
        button.setFocusPainted(false);
        add(button);
        final Timeline rolloverTimeline = new Timeline(button);
        rolloverTimeline.addPropertyToInterpolate(
                "foreground", Color.blue, Color.red);
        rolloverTimeline.setDuration(2500);
        button.addMouseListener(new MouseAdapter() 

            @Override
            public void mouseEntered(MouseEvent e) 
                rolloverTimeline.play();
            

            @Override
            public void mouseExited(MouseEvent e) 
                rolloverTimeline.playReverse();
            
        );
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocation(150, 150);
        pack();
    

    public static void main(String[] args) 
        SwingUtilities.invokeLater(new Runnable() 

            @Override
            public void run() 
                new ButtonFg().setVisible(true);
            
        );
    

【讨论】:

您只是在证明我在问题中所说的话 - display:inline 属性显然在 Swing 中不起作用。我的问题是(1)为什么?和(2)如何解决?感谢您的回答,但它没有回答这些问题。

以上是关于Java:Swing 中的 HTML/CSS,内联显示不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在java中面板和框架啥区别?

wordpress 打印中的简码始终位于顶部,内联 HTML

无法构建html / css内联表单

使用 :hover 元素的内联样式(使用 HTML/CSS/php)[重复]

忽略内联样式 HTML CSS

HTML+CSS笔记 CSS进阶续集