Изменение курсора над компонентом в Java Swing

Совсем недавно обнаружил одну особенность компонентов Java Swing. Особенность эта заключается в том, что для каждого компонента можно устанавливать форму курсора, который будет показываться при наведении указателя мыши на компонент. Хотим, чтобы при наведении на кнопку отображался курсор загрузки (песочные часы или что-то в этом роде) — пожалуйста. Хотим, чтобы при наведении на какой-то компонент показывался курсор «перемещения» — тоже можно. Давайте посмотрим, как это делается и что для этого нужно.

А делается это очень просто при помощи метода setCursor. В качестве параметра методу передается одна из констант класса Cursor. К примеру, для того, чтобы над кнопкой отображался курсор в виде руки, как на гиперссылках в браузере, тогда делаем вот так:

JButton button = new JButton("Cursor.HAND_CURSOR");
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

Вот и всё. Для чего это может понадобится — даже и не знаю, но всегда полезно быть в курсе того, как это можно сделать. Давайте посмотрим на тестовый пример. Здесь имеется четыре кнопки. Для каждой кнопки установлен свой курсор. При наведении на каждую кнопку курсор меняет форму. Всё предельно просто.

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

	public static void createGUI() {
		final JFrame frame = new JFrame("Test frame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		
		panel.add(Box.createVerticalGlue());
		
		JButton button1 = new JButton("Cursor.MOVE_CURSOR");
		button1.setAlignmentX(JComponent.CENTER_ALIGNMENT);
		button1.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
		panel.add(button1);
		
		panel.add(Box.createVerticalGlue());
		
		JButton button2 = new JButton("Cursor.HAND_CURSOR");
		button2.setAlignmentX(JComponent.CENTER_ALIGNMENT);
		button2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		panel.add(button2);
		
		
		panel.add(Box.createVerticalGlue());
		
		JButton button3 = new JButton("Cursor.CROSSHAIR_CURSOR");
		button3.setAlignmentX(JComponent.CENTER_ALIGNMENT);
		button3.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
		panel.add(button3);
		
		panel.add(Box.createVerticalGlue());
		
		JButton button4 = new JButton("Cursor.TEXT_CURSOR");
		button4.setAlignmentX(JComponent.CENTER_ALIGNMENT);
		button4.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
		panel.add(button4);
		
		panel.add(Box.createVerticalGlue());
		
		frame.getContentPane().setLayout(new BorderLayout());
		frame.getContentPane().add(panel, BorderLayout.CENTER);

		frame.setPreferredSize(new Dimension(260, 220));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				createGUI();
			}
		});
	}

}
Реклама

5 Responses to Изменение курсора над компонентом в Java Swing

  1. Gorets says:

    «Для чего это может понадобится – даже и не знаю», прикольно же, пишешь блокнот, а когда на водить хомяка в тексАреа или тексВиелд — меняется курсор =)

    • brabadu says:

      Так ведь над текстовыми полями курсор сам меняется.
      Может понадобится для самописных копонент, или когда хочется полностью свою тему курсорную использовать. В игрушках например, очень часто свои курсоры.

    • bondforever says:

      Тоже вариант )

    • bondforever says:

      Такой вот вариант в голову пришел — есть JButton, при нажатии на него должно что-то продолжительное по времени выполниться (ориентировочно несколько секунд или около того). Показывать какой-то диалог с прогрессом не особо хочется — можно кнопку задизейблить и показать курсор наподобие песочных часов.

  2. Саня says:

    Можно показать круглый значок загрузки как на ютубе

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: