有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java textComponent中带边框/边框单词的Html文本

下面标签中的html代码按预期在浏览器中呈现
好的,JavaAPI声明“border”不完全受支持,但是 这个例子也不起作用
虽然我希望渺茫,但我想问,在这方面是否有其他选择 html来绘制边框
我发现最接近的是一个单单元格表格。在那里,填充物起作用,但最薄的边缘相当丰富
请注意,我只想框一个单词,而不是整行或整段

import javax.swing.*;

public class HtmlLabel extends JFrame {

  public HtmlLabel() {
    setSize(300,200);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setTitle("A JLabel with HTML text");

    JLabel lb= new JLabel("""
    <html>Please give <span style="border:1px solid; background:#D8EAFC;\
    padding:5px">me</span> a frame.</html>""");
    add(lb);
    setVisible(true);
  }

  public static void main(String args[]) {
    SwingUtilities.invokeLater(HtmlLabel::new);
  }

}

共 (1) 个答案

  1. # 1 楼答案

    不知道你的HTML是从哪里来的,也不知道你是如何构建的

    也许您可以将JTextPane与自定义Painter一起使用:

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.text.*;
    import javax.swing.border.*;
    
    public class TextPaneInsert2
    {
        private static void createAndShowGUI()
        {
            JTextPane textPane = new JTextPane();
            textPane.setText("Please  give  me a frame");
            textPane.setEditable( false );
    
            try
            {
                RectanglePainter rp = new RectanglePainter( Color.BLACK );
                textPane.getHighlighter().addHighlight(7, 13, rp);
            }
            catch (Exception e) {System.out.println(e);}
    
            JFrame frame = new JFrame("SSCCE");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(textPane, BorderLayout.PAGE_START);
            frame.add(textPane, BorderLayout.PAGE_END);
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationByPlatform( true );
            frame.setVisible( true );
        }
    
        public static void main(String[] args) throws Exception
        {
            java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
        }
    }
    

    上面的代码使用Rectangle Painter

    我快速更改了RectanglePainter以绘制背景和边框:

    //  Code is the same as the default highlighter except we use drawRect(...)
    g.setColor(Color.CYAN);
    g.fillRect(r.x, r.y, r.width, r.height);
    //g.drawRect(r.x, r.y, r.width - 1, r.height - 1);
    g.setColor(Color.BLACK);
    g.drawRect(r.x, r.y, r.width - 1, r.height);
    

    我得到:

    enter image description here

    注:

    1. 我在要突出显示的单词前后添加了额外的空格,以获得额外的填充
    2. 另外,我也不知道为什么要用JTextPane进行测试。您可以使用任何文本组件,因此也可以使用JTextField