gpt4 book ai didi

java - JLabel getToolTipText() 不返回已设置的工具提示

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:34 26 4
gpt4 key购买 nike

所以我正在研究一些可以在屏幕上找到 Jlabel 位置的方法,这样我就可以使用这些位置稍后根据这些点的类型生成数据。

为了跟踪特定点,我已将重要标签的工具提示设置为某些文本,以便我可以将它们添加到 Map<String, Rectangle> 。该矩形将给出其在屏幕上的位置以及标签的大小。这将用于生成我的数据点的定位。

现在的问题是我没有得到我使用getToolTipText()设置的任何字符串。在 JLabels 上。

public Map<String, Rectangle> positions() {        
Map<String, Rectangle> ioPoints = new HashMap<>();
return positions(mainPanel, ioPoints);
}

// Runs through each component starting from the mainPanel which contains everything
// Only labels have tooltips
public Map<String, Rectangle> positions(Container p1, Map<String, Rectangle> ioPoints) {

for (Component p : p1.getComponents()) {

if (p instanceof JLabel) {

try {

if (((JLabel) p).getToolTipText() != null) {
// Never hit at all???
System.out.println("Has a tooltip:" + ((JLabel) p).getToolTipText());
Rectangle r = p.getBounds();
Component par = p;
while (par.getParent() != mainPanel) {
par = par.getParent();
}
r = SwingUtilities.convertRectangle(par, r, mainPanel);
//Point spot = ((JLabel) p).getLocation();
((JLabel) p).setText("x=" + r.getX() + ", y=" + r.getY());
Rectangle oldRect = ioPoints.put(((JLabel) p).getToolTipText(), r);
if (oldRect != null) {
System.out.println("Replaced " + ((JLabel) p).getToolTipText()
+ ".\nOld rectangle " + oldRect.toString()
+ "\nNew rectangle: " + r.toString());
}
//System.out.println("Position: " + spot.toString() + "\tr: " + r.toString());
}
} catch (NullPointerException | IllegalComponentStateException e) {
System.out.println("Error with " + ((JLabel) p).getName());
}
} else {
if (p instanceof JPanel) {
return positions((Container) p, ioPoints);
}
}
}

return ioPoints;

}

我设置工具提示的示例代码。

tooltip = new String[]{"Comp Amps Temp " + rack.getName() + " `%sgname` `%compname`"};

for (int i = 0; i < numSg; i++) {
for (int j = 0; j < comp[i]; j++) {
label = new JLabel("");
label.setToolTipText(tooltip[0]
.replace("`%sgname`", rack.getSuctionGroupNameIndex(i))
.replace("`%compname`", rack.getSuctionGroupIndex(i).getCompressorNameIndex(j)));
label.setFont(font);
label.setOpaque(true);
label.setBorder(border);
label.setBackground(Colours.BlueLight.getCol());
panel.add(label, c);
c.gridx += 1;
}
}

Tooltip showing on JPanel

任何想法为什么 jlabel.getToolTipText();不会为我明确设置的工具提示提供任何值。

最佳答案

我建议您创建一个扩展 JLabel 的类,如下所示:

public class ToolTippedJLabelOrWhateverYouWantToCallIt extends JLabel {
String tooltip = null;
@Override
public void setToolTipText(String text) {
tooltip = text;
super.setToolTipText(text);
}
@Override
public String getToolTipText() {
return tooltip;
}
}

可能还有另一种方法来获取工具提示文本,但这只是一种简单的方法。

关于java - JLabel getToolTipText() 不返回已设置的工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040658/

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