所以我正在开发一些可以在屏幕上找到Jlabels位置的东西,这样我就可以使用这些位置在这些位置生成数据,具体取决于它的点类型。
为了跟踪特定点,我已将重要标签的工具提示设置为特定文本,以便我可以将它们添加到Map<String, Rectangle>
。矩形将在屏幕上显示其位置以及标签的大小。这将用于生成我的数据点的定位。
现在的问题是,我没有使用JLabel上的getToolTipText()
获取任何字符串。
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;
}
}
任何想法为什么jlabel.getToolTipText();
不会给我任何我明确设定的工具提示值。
答案 0 :(得分:0)
我建议你创建一个扩展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;
}
}
可能有另一种获取工具提示文本的方法,但这只是一种简单的方法。