gpt4 book ai didi

java - 获取 jlabel 内文本的边界

转载 作者:行者123 更新时间:2023-11-30 06:11:15 25 4
gpt4 key购买 nike

我想绘制一个从 JLabel 中的文本到 JLabel 外部的点的箭头。为了在适当的位置开始箭头,我需要 JLabel 内实际文本的边界。我下面的回答将展示如何获得这些界限。

最佳答案

您可以使用SwingUtilities.layoutCompoundLabel

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class LabelLayout extends JLabel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

Graphics grid = g.create();
grid.setColor( Color.ORANGE );

Rectangle viewR = new Rectangle();
viewR.width = getSize().width;
viewR.height = getSize().height;
Rectangle iconR = new Rectangle();
Rectangle textR = new Rectangle();

String clippedText = SwingUtilities.layoutCompoundLabel
(
this,
grid.getFontMetrics(),
getText(),
getIcon(),
getVerticalAlignment(),
getHorizontalAlignment(),
getVerticalTextPosition(),
getHorizontalTextPosition(),
viewR,
iconR,
textR,
getIconTextGap()
);

int gridSize = 10;
int start = iconR.x;
int end = iconR.x + iconR.width;

System.out.println("Text bounds: " + textR );
System.out.println("Icon bounds: " + iconR );

for (int i = start; i < end; i += gridSize)
{
grid.drawLine(i, iconR.y, i, iconR.y + iconR.height);
}

grid.dispose();
}

private static void createAndShowGUI()
{
LabelLayout label = new LabelLayout();
label.setBorder( new LineBorder(Color.RED) );
label.setText( "Some Text" );
label.setIcon( new ImageIcon( "DukeWaveRed.gif" ) );
label.setVerticalAlignment( JLabel.CENTER );
label.setHorizontalAlignment( JLabel.CENTER );
// label.setVerticalTextPosition( JLabel.BOTTOM );
label.setVerticalTextPosition( JLabel.TOP );
label.setHorizontalTextPosition( JLabel.CENTER );

JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( label );
frame.setLocationByPlatform( true );
frame.pack();
frame.setSize(300, 200);
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}

此示例在标签中的图标上方绘制额外的线条。

关于java - 获取 jlabel 内文本的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50193933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com