gpt4 book ai didi

java - 更改/显示光标与文本

转载 作者:行者123 更新时间:2023-12-01 17:00:42 24 4
gpt4 key购买 nike

我目前正在尝试将 JFrame 上显示的光标更改为某些文本,例如“请稍候,您的工作正在完成”,而某个 buttonactionPerformed() 方法正在执行。到目前为止,我找到的唯一解决方案是用包含我想要的文本的 Image 更改 Cursor 。代码如下:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Hasikome extends JFrame{

static Cursor cursor;

private static final long serialVersionUID = 1L;

public static void main(String[] args) {

final Hasikome hasi = new Hasikome();
hasi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hasi.setSize(new Dimension(1200, 1200));
hasi.setPreferredSize(new Dimension(500, 500));
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension dim = kit.getBestCursorSize(16, 16);
BufferedImage buffered = null;
try {
buffered = ImageIO.read(new File(Paths.get("").toAbsolutePath().toString() + "\\belge.png"));
} catch (IOException e) {
e.printStackTrace();
}
java.awt.Shape circle = new Ellipse2D.Float(0, 0, dim.width - 1, dim.height - 1);
Graphics2D g = buffered.createGraphics();
g.setColor(Color.BLUE);
g.draw(circle);
g.setColor(Color.RED);
hasi.add(new JButton(new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
hasi.setCursor(cursor);
try {
Thread.sleep(10000);
} catch (InterruptedException e1) {
e1.printStackTrace();
} finally {
hasi.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}), BorderLayout.NORTH);
int centerX = (dim.width - 1) /2;
int centerY = (dim.height - 1) / 2;
g.drawLine(centerX, 0, centerX, dim.height - 1);
g.drawLine(0, centerY, dim.height - 1, centerY);
g.dispose();
cursor = kit.createCustomCursor(buffered, new Point(centerX, centerY), "myCursor");
hasi.pack();
hasi.setVisible(true);
}
}

此代码的问题是 Dimension dim = kit.getBestCursorSize(16, 16); 此行始终在 Windows 上生成大小为 32x32 的 Cursor code> 并且它依赖于平台。我不能使用超过 32x32 的值,否则我会收到 cursor = kit.createCustomCursor(buffered, new Point(centerX, centerY), "myCursor"); 行的异常。而且因为我使用相当长的文本 (250x16),所以它不允许我正确地将文本图像显示为光标

这个解决方案不是必需的,我想要完成的是向用户显示文本作为 Cursor 而某些 ButtonactionPerformed()方法正在执行。我有什么办法可以做到这一点吗?提前致谢。

最佳答案

查看Disabled Glass Pane一种方法。

如果允许您在使用“等待”光标时显示玻璃 Pane ,并在半透明背景上绘制文本。

关于java - 更改/显示光标与文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27822671/

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