Java 隐藏JLabel工具提示文本
我正在将Java 隐藏JLabel工具提示文本,java,swing,tooltip,jlabel,Java,Swing,Tooltip,Jlabel,我正在将JLabel对象添加到JPanel。每个标签都有一个不同的工具提示文本,我用它来识别每个标签,问题是工具提示总是显示在悬停状态,我需要它总是被隐藏 每个标签都有一个不同的图像图标,这就是为什么我不能使用标签文本 我找不到有关某些函数(如.hidetooltip)的标签API的任何文档 编辑 GridLayout上的许多JLabel对象中的每一个都持有一个图像。我需要知道每个图像的行和列。将工具提示文本隐藏为空 myComponent.setToolTipText(null); “par
JLabel
对象添加到JPanel
。每个标签都有一个不同的工具提示文本,我用它来识别每个标签,问题是工具提示总是显示在悬停状态,我需要它总是被隐藏
每个标签都有一个不同的图像图标,这就是为什么我不能使用标签文本
我找不到有关某些函数(如.hidetooltip
)的标签API的任何文档
编辑
GridLayout
上的许多JLabel
对象中的每一个都持有一个图像。我需要知道每个图像的行和列。将工具提示文本隐藏为空
myComponent.setToolTipText(null);
“param-要显示的字符串;如果文本为空,则此组件的工具提示将关闭”
编辑:针对您在评论中描述的实际问题,有多种方式将信息与JLabel关联起来。你可以(a)扩展类并保持实例变量定义网格值b)使用一个带有JLable的MAP键,并用行/ COL C值)使用Jabele< P>的名字,你应该考虑把信息存储在别处。一种方法是创建一个从JLabel派生的类,用于存储行和列信息。然后使用该子类的实例,而不是使用JLabel实例。它们将以常规JLabel的方式呈现,但您可以以不在工具提示中弹出该信息的方式检索行和列信息
GridLayout
上的许多JLabel
对象中的每一个都持有一个图像。我需要知道每个图像的行和列
实现这一点的一种方法是存储一个BufferedImage[][]
来检查图像。例如
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.net.URL;
import java.util.Random;
import javax.imageio.ImageIO;
public final class ImageArray {
int r = 8;
int c = 8;
// The images in the chess board, used to check which
// image was chosen for this place on the board.
final private BufferedImage[][] chessBoardImages = new BufferedImage[r][c];
private final int rowSprite = 2;
private final int colSprite = 6;
// Holds the tile sheet images
private final BufferedImage[] chessPieceImages =
new BufferedImage[colSprite * rowSprite];
private JComponent ui = null;
private final BufferedImage chessSpriteSheet;
ImageArray(BufferedImage chessSpriteSheet) {
this.chessSpriteSheet = chessSpriteSheet;
initUI();
}
private int getImageIndex(Image img) {
for (int i = 0; i < chessPieceImages.length; i++) {
if (chessPieceImages[i].equals(img)) {
return i;
}
}
return -1;
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
int w = chessSpriteSheet.getWidth();
int h = chessSpriteSheet.getHeight() / rowSprite;
int wStep = chessSpriteSheet.getWidth() / colSprite;
int hStep = chessSpriteSheet.getHeight() / rowSprite;
for (int x = 0; x < colSprite; x++) {
for (int y = 0; y < rowSprite; y++) {
chessPieceImages[x + (y * colSprite)]
= chessSpriteSheet.getSubimage(
x * wStep, y * hStep, wStep, h);
}
}
JPanel grid = new JPanel(new GridLayout(r, c));
ui.add(grid, BorderLayout.CENTER);
Random rand = new Random();
for (int x = 0; x < r; x++) {
boolean oddRow = x % 2 == 0;
for (int y = 0; y < c; y++) {
boolean oddCol = y % 2 == 0;
BufferedImage img = chessPieceImages[
rand.nextInt(colSprite * rowSprite)];
JLabel l = new JLabel(new ImageIcon(img));
chessBoardImages[x][y] = img;
l.setOpaque(true);
if ((oddRow && oddCol) || (!oddRow && !oddCol)) {
l.setBackground(Color.WHITE);
} else {
l.setBackground(Color.LIGHT_GRAY);
}
grid.add(l);
}
}
JLabel htmlLabel = new JLabel(getHtml());
htmlLabel.setHorizontalTextPosition(SwingConstants.CENTER);
htmlLabel.setVerticalTextPosition(SwingConstants.BOTTOM);
ui.add(htmlLabel,
BorderLayout.LINE_END);
}
private String getHtml() {
String style = "<style type='text/css'>"
+ "body {"
+ "font-size: 36px;"
+ "}"
+ ".white {"
+ "background-color: #FFFFFF;"
+ "}"
+ ".black {"
+ "background-color: #BBBBBB;"
+ "}"
+ "</style>";
String pre = "<html><head>%1s</head><body><table border=1 cellspacing=0>";
StringBuilder sb = new StringBuilder(String.format(pre, style));
for (int y = 0; y < r; y++) {
sb.append("<tr>");
for (int x = 0; x < c; x++) {
Image img = chessBoardImages[y][x];
final int index = getImageIndex(img);
// hack to convert index to unicode codepoint..
int unicodeOffset = ((index/colSprite)*colSprite)==0 ? colSprite : -colSprite;
int unicodeIndexOffset;
switch (index) {
case 3:
unicodeIndexOffset = 4;
break;
case 4:
unicodeIndexOffset = 3;
break;
case 9:
unicodeIndexOffset = 10;
break;
case 10:
unicodeIndexOffset = 9;
break;
default:
unicodeIndexOffset = index;
}
int unicode = 9812 + unicodeIndexOffset + unicodeOffset;
// end: hack to convert index to unicode index..
String cssClass;
boolean oddCol = x%2==1;
boolean oddRow = y%2==1;
if ((oddRow && oddCol) || (!oddRow && !oddCol)) {
cssClass = "white";
} else {
cssClass = "black";
}
sb.append(String.format(
"<td class='%1s'>&#%2s;</td>", cssClass, unicode));
}
sb.append("</tr>");
}
sb.append("</table></body></html>");
return sb.toString();
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) throws Exception {
String urlString = "http://i.stack.imgur.com/memI0.png";
final BufferedImage img = ImageIO.read(new URL(urlString));
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
ImageArray o = new ImageArray(img);
JFrame f = new JFrame("Image Array");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
import java.awt.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入java.net.URL;
导入java.util.Random;
导入javax.imageio.imageio;
公共最终类ImageArray{
int r=8;
int c=8;
//棋盘中的图像,用于检查
//这张图片是为黑板上的这个位置选择的。
最终私有BuffereImage[][]棋盘图像=新的BuffereImage[r][c];
私有最终整数rowSprite=2;
私有最终int colSprite=6;
//保存平铺图图像
私有最终缓冲区图像[]棋子图像=
新的BuffereImage[colSprite*rowSprite];
私有JComponent ui=null;
专用最终缓冲区图像棋盘;
图像阵列(缓冲图像棋盘){
this.chessSpriteSheet=chessSpriteSheet;
initUI();
}
私有int getImageIndex(图像img){
对于(int i=0;i