首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java.awt.Graphics上绘制java.awt.Cursor

在java.awt.Graphics上绘制java.awt.Cursor
EN

Stack Overflow用户
提问于 2013-05-03 20:27:45
回答 1查看 886关注 0票数 3

是否有可能以位图图像(例如BufferedImage)或任何可在Graphics2D上绘制的形式获得标准的AWT Cursor?例如,文本光标new Cursor(Cursor.TEXT_CURSOR)

我相信这些光标会随着本机平台的不同而变化,我想把它们合并到一些Swing图标中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-03 23:58:19

即使您使用自己的图标,也可以显示与平台相关的光标,稍后将在给定上下文中使用该光标。将鼠标悬停在按钮和相邻面板上可查看效果。使用图标的组件上的工具提示总是一种很好的触感。

代码语言:javascript
复制
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

/**
 * @see http://stackoverflow.com/a/16363072/230513
 */
public class Test {

    private static class CursorPanel extends JPanel {

        private static final Icon ICON = UIManager.getIcon("html.pendingImage");
        private Cursor cursor;

        public CursorPanel(final Cursor cursor) {
            this.cursor = cursor;
            String name = cursor.getName();
            JButton button = new JButton(name, ICON);
            button.setCursor(cursor);
            button.setToolTipText(name);
            this.add(button);
            final JPanel panel = new JPanel() {
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(200, 125);
                }
            };
            panel.setCursor(cursor);
            panel.setBorder(new TitledBorder(name));
            this.add(panel);
        }
    }

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(0, 1));
        f.add(new CursorPanel(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)));
        f.add(new CursorPanel(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16358932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档