So basically I'm playing around with Graphics and bunch fun things which I want to know before making a game I want to know different ways of how I can use different loops to do some fun things but I cannot figure out how I can use the INT I make in the method of mouseMoved and then use it in the Graphics Method. The code might show a better example of what I'm trying to explain.
package com.martin;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.*;
public class Grids extends JFrame implements MouseMotionListener {
JPanel p = new JPanel();
public int width = 1200;
public int height = 800;
public Grids() {
addMouseMotionListener(this);
windowLoader();
}
public static void main(String[] args){
new Grids();
}
public void windowLoader() {
setPreferredSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));
setMinimumSize(new Dimension(width, height));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
// setBackground(Color.BLACK);
p.setSize(width, height);
p.setOpaque(false);
// p.setBackground(Color.BLACK);
add(p);
pack();
setVisible(true);
}
public void mouseMoved(MouseEvent e) {
double mouseX = e.getX();
double mouseY = e.getY();
}
public void mouseDragged(MouseEvent e) {
}
public void paint(Graphics g) {
Random rand = new Random();
int cols, rows;
int size = 8;
Color color;
for (rows = 0; rows < width; rows++) {
for (cols = 0; cols < height; cols++) {
color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
// g.setColor(color);
// g.fillRect(rows * size, cols * size, size, size);
// g.drawRect(rows * size, cols * size, size, size);
// g.drawLine(rows * size, cols * size, size, size);
// g.drawRoundRect(rows * size, cols * size, size, size, 10, 10);
// g.fillRoundRect(rows * size, cols * size, size, size, 10, 10);
}
}
// int x = 0;
// int y = 0;
// int spacing = rand.nextInt(20) + 1;
//
// while (spacing > -1) {
// spacing = spacing + rand.nextInt(20);
// }
//
// while (x < width) {
// g.drawLine(x, 0, x, height);
// x = x + spacing;
// }
// while (y < height) {
// g.drawLine(0, y, width, y);
// y = y + spacing;
// }
// Point mouseL = MouseInfo.getPointerInfo().getLocation();
// double mouseX = mouseL.getX();
// double mouseY = mouseL.getY();
int x = 0, y = 0;
//Can't access the int from the mouseMoved I get red underline for error (variable cannot be found)
while (x < width) {
if (mouseX < 1) {
x = x + 10;
} else {
x = x + (int)mouseX;
}
while (y < height) {
if (mouseY < 1) {
y = y + 10;
} else {
y = y + (int)mouseY;
}
g.fillRoundRect(x, y, 10, 10, 10, 10);
}
}
repaint();
}
}
This is the whole code and I tried using the MouseInfo to get the pointer location but it gets the location of the JFrame component and I want to get the mouse location on the JFrame itself and not off the component.
I believe the following mre demonstrates the functionality you want.
Use drawTrail
to turn trail drawing on or off:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Grids extends JPanel implements MouseMotionListener {
public final static int WIDTH = 1200, HEIGHT = 800, POINT_SIZE = 10;
private double mouseX, mouseY;
private List<Point> points ; //stores all trail points
private boolean drawTrail = true; //change to false to draw only one point at the mouse location
public Grids() {
addMouseMotionListener(this);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setBackground(Color.WHITE);
if(drawTrail) {
points = new ArrayList<>(); //add mouse point to collection
}
}
@Override
public void mouseMoved(MouseEvent e) {
//set a min distance between points
if( Math.abs(mouseX - e.getX()) >= POINT_SIZE || Math.abs(mouseY - e.getY()) >= POINT_SIZE ) {
if(drawTrail) {
points.add(new Point(e.getX(),e.getY()));
}
mouseX = e.getX();
mouseY = e.getY();
repaint();
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Random rand = new Random();
if(drawTrail){
//draw all collected points
for (Point p : points){
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval(p.x, p.y, POINT_SIZE, POINT_SIZE);
}
}else{
//if you only want the point at the
Color color = new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
g.setColor(color);
g.fillOval((int)mouseX, (int)mouseY, POINT_SIZE, POINT_SIZE);
}
}
@Override
public void mouseDragged(MouseEvent e) {/*todo*/}
public static void main(String[] args0) {
JFrame frame = new JFrame();
frame.add(new Grids());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
}
}