即使您使用自己的圖標,也可以顯示稍後將在給定上下文中使用的與平臺相關的遊標。將鼠標懸停在按鈕和相鄰的面板上即可看到效果。使用圖標的組件工具提示始終是一個很好的觸摸。
![image](https://i.stack.imgur.com/kmwa0.png)
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();
}
});
}
}
沒有,就我所知,這是不可能的。 *「我想將它們合併到一些Swing圖標中。」*這會讓用戶感到困惑,所以我強烈建議不要這樣做。事實上,擁有可識別爲指針的東西會更好,但與系統使用的任何遊標截然不同。 – 2013-05-03 12:30:39
你不能用純Java來做,但從技術上講,如果你訴諸平臺相關的本地代碼,你可以做到這一點(見http://stackoverflow.com/questions/739870/extract-cursor-image-in-java。)但正如Andrew所說,在這種情況下,我真的會提出反對意見 - 將光標合併到圖標中是UI災難的完整配方。 – berry120 2013-05-03 12:48:28
@AndrewThompson我有一個工具欄,其中一些圖標與工具使用的光標相對應(例如文本光標,東西方調整大小等),我在這裏看到的混淆風險很小。許多應用程序都這樣。例如。看看Photoshop中的工具欄。 – 2013-05-03 14:24:36