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