JLabel getToolTipText() 不返回已设置的工具提示
JLabel getToolTipText() not returning tooltips that have been set
所以我正在研究可以在屏幕上找到 Jlabel 位置的东西,这样我就可以使用这些位置在这些点生成数据,具体取决于它是什么类型的点。
为了跟踪特定点,我将重要标签的工具提示设置为特定文本,以便我可以将它们添加到 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();
不会给我明确设置的工具提示的任何值。
我建议您创建一个 class 来扩展 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;
}
}
可能还有另一种获取工具提示文本的方法,但这只是一种简单的方法。
所以我正在研究可以在屏幕上找到 Jlabel 位置的东西,这样我就可以使用这些位置在这些点生成数据,具体取决于它是什么类型的点。
为了跟踪特定点,我将重要标签的工具提示设置为特定文本,以便我可以将它们添加到 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();
不会给我明确设置的工具提示的任何值。
我建议您创建一个 class 来扩展 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;
}
}
可能还有另一种获取工具提示文本的方法,但这只是一种简单的方法。