/*This is a simple application that is used to display a simple panel.
Have fun.*/
package coursa;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Mouse extends JFrame implements ActionListener {
public Mouse() {
super("Message");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(420, 220);
BorderLayout border = new BorderLayout();
setLayout(border);
JLabel msg = new JLabel("Click Yes to close program.");
add(BorderLayout.NORTH, msg);
PrankPanel prank = new PrankPanel();
prank.Yes.addActionListener(this);
add(BorderLayout.CENTER, prank);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
@Override
public Insets getInsets() {
return new Insets(40, 10, 10, 10);
}
private static void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException exc) {
System.err.println("Couldn't use the system "
+ "look and feel: " + exc);
}
}
public static void main(String[] arguments) {
Mouse.setLookAndFeel();
new Mouse();
}
}
class PrankPanel extends JPanel implements MouseMotionListener {
JButton Yes = new JButton("Yes");
int buttonX, buttonY, mouseX, mouseY;
int width, height;
PrankPanel() {
super();
setLayout(null);//So that it does not use the default order layout.
addMouseMotionListener(this);
buttonX = 110;
buttonY = 110;
Yes.setBounds(new Rectangle(buttonX, buttonY,
70, 20));//Place the button on the panel.
add(Yes);
}
@Override
public void mouseMoved(MouseEvent event) {
mouseX = event.getX();
mouseY = event.getY();
width = (int) getSize().getWidth();
height = (int) getSize().getHeight();
if (Math.abs((mouseX + 35) - buttonX) < 50) {
buttonX = moveButton(mouseX, buttonX, width);
repaint();
}
if (Math.abs((mouseY + 10) - buttonY) < 50) {
buttonY = moveButton(mouseY, buttonY, height);
repaint();
}
}
@Override
public void mouseDragged(MouseEvent event) {
// ignore this event
}
private int moveButton(int mouseAt, int buttonAt, int bord) {
if (buttonAt < mouseAt) {
buttonAt--;
} else {
buttonAt++;
}
if (buttonAt > (bord - 20)) {
buttonAt = 10;
}
if (buttonAt < 0) {
buttonAt = bord - 80;
}
return buttonAt;
}
@Override
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
Yes.setBounds(buttonX, buttonY, 70, 20);//The button is displayed at the current position.
}
}
Have fun.*/
package coursa;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Mouse extends JFrame implements ActionListener {
public Mouse() {
super("Message");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(420, 220);
BorderLayout border = new BorderLayout();
setLayout(border);
JLabel msg = new JLabel("Click Yes to close program.");
add(BorderLayout.NORTH, msg);
PrankPanel prank = new PrankPanel();
prank.Yes.addActionListener(this);
add(BorderLayout.CENTER, prank);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
@Override
public Insets getInsets() {
return new Insets(40, 10, 10, 10);
}
private static void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException exc) {
System.err.println("Couldn't use the system "
+ "look and feel: " + exc);
}
}
public static void main(String[] arguments) {
Mouse.setLookAndFeel();
new Mouse();
}
}
class PrankPanel extends JPanel implements MouseMotionListener {
JButton Yes = new JButton("Yes");
int buttonX, buttonY, mouseX, mouseY;
int width, height;
PrankPanel() {
super();
setLayout(null);//So that it does not use the default order layout.
addMouseMotionListener(this);
buttonX = 110;
buttonY = 110;
Yes.setBounds(new Rectangle(buttonX, buttonY,
70, 20));//Place the button on the panel.
add(Yes);
}
@Override
public void mouseMoved(MouseEvent event) {
mouseX = event.getX();
mouseY = event.getY();
width = (int) getSize().getWidth();
height = (int) getSize().getHeight();
if (Math.abs((mouseX + 35) - buttonX) < 50) {
buttonX = moveButton(mouseX, buttonX, width);
repaint();
}
if (Math.abs((mouseY + 10) - buttonY) < 50) {
buttonY = moveButton(mouseY, buttonY, height);
repaint();
}
}
@Override
public void mouseDragged(MouseEvent event) {
// ignore this event
}
private int moveButton(int mouseAt, int buttonAt, int bord) {
if (buttonAt < mouseAt) {
buttonAt--;
} else {
buttonAt++;
}
if (buttonAt > (bord - 20)) {
buttonAt = 10;
}
if (buttonAt < 0) {
buttonAt = bord - 80;
}
return buttonAt;
}
@Override
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
Yes.setBounds(buttonX, buttonY, 70, 20);//The button is displayed at the current position.
}
}
Comments
Post a Comment