Swing JLabel:在文本和下划线之间提供间隙
Swing JLabel: Provide gap between text and underline
如何在不使用 HTML 或自定义绘画(如 here)但使用字体属性的情况下在文本和下划线之间提供一些像素间隙。这是我的 MRE:
import java.awt.Font;
import java.awt.font.TextAttribute;
import java.util.Collections;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class LabelTryout {
public static void main(String[] args) {
JLabel label = new JLabel("Here is a underlined text");
label.setFont(underlineFont(label.getFont()));
label.setHorizontalAlignment(SwingConstants.CENTER);
JFrame frm = new JFrame("Underline");
frm.add(label);
frm.setSize(300, 200);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
/**
* Gets the underline font for the given base font.
*
* @param aBaseFont base font to paint it as underline.
* @return underline font.
*/
public static Font underlineFont(Font aBaseFont) {
// here I want to provide gap for the base font.
return aBaseFont.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE,
TextAttribute.UNDERLINE_ON));
}
}
如果不能,请说明。
我不知道有任何 属性 可以用来配置它。
如果您不想扩展标签来进行自定义绘画,那么您可以尝试:
使用 CompoundBorder
。你可以用一个EmptyBorder
和一个MatteBorder
来模拟画线
上述方法取决于布局和以首选大小显示的标签。要强制执行此操作,您可以将标签包装在 JPanel
和 FlowLayout
中,因为此布局符合首选大小。
创建您自己的自定义 Border
。 Border
的绘画逻辑会查看首选尺寸和实际尺寸并相应地绘制线条。
创建一个也使用上述方法的自定义 Icon
。
这些可能是在不扩展 JLabel 的情况下进行自定义绘画的方法。
如何在不使用 HTML 或自定义绘画(如 here)但使用字体属性的情况下在文本和下划线之间提供一些像素间隙。这是我的 MRE:
import java.awt.Font;
import java.awt.font.TextAttribute;
import java.util.Collections;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class LabelTryout {
public static void main(String[] args) {
JLabel label = new JLabel("Here is a underlined text");
label.setFont(underlineFont(label.getFont()));
label.setHorizontalAlignment(SwingConstants.CENTER);
JFrame frm = new JFrame("Underline");
frm.add(label);
frm.setSize(300, 200);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
/**
* Gets the underline font for the given base font.
*
* @param aBaseFont base font to paint it as underline.
* @return underline font.
*/
public static Font underlineFont(Font aBaseFont) {
// here I want to provide gap for the base font.
return aBaseFont.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE,
TextAttribute.UNDERLINE_ON));
}
}
如果不能,请说明。
我不知道有任何 属性 可以用来配置它。
如果您不想扩展标签来进行自定义绘画,那么您可以尝试:
使用
CompoundBorder
。你可以用一个EmptyBorder
和一个MatteBorder
来模拟画线上述方法取决于布局和以首选大小显示的标签。要强制执行此操作,您可以将标签包装在
JPanel
和FlowLayout
中,因为此布局符合首选大小。创建您自己的自定义
Border
。Border
的绘画逻辑会查看首选尺寸和实际尺寸并相应地绘制线条。创建一个也使用上述方法的自定义
Icon
。
这些可能是在不扩展 JLabel 的情况下进行自定义绘画的方法。