Hej,
Jag försöker bygga ett enkelt Java-program där jag kan flytta en cirkel, en triangel samt en rektangel med musen.
Vid "musdragning" respektive släpp av vänsterklick ska den aktuella figuren placeras över alla andra.
Jag har skapat tre klasser för att formge de tre figurerna:
Jag har även skapat en klass som ritar upp objekten samt implementerar muslyssnare:
Slutligen har jag en klass som innehåller main-funktionen och skapar objekten som ska adderas på skärmen:
Problemen här är dock:
- Jag vill att den figur som flyttas ska placeras över andra figurer på samma ställe.
- Jag vill att området "runt omkring" en figur ej ska reagera vid klick, dvs. man ska ej kunna flytta en figur om man inte markerar själva figurområdet.
Finns här någon Java-kunnig som vill hjälpa mig?
Jag försöker bygga ett enkelt Java-program där jag kan flytta en cirkel, en triangel samt en rektangel med musen.
Vid "musdragning" respektive släpp av vänsterklick ska den aktuella figuren placeras över alla andra.
Jag har skapat tre klasser för att formge de tre figurerna:
public class Square {
public Square(Graphics g, int width, int height, int x, int y){
g.setColor(Color.RED);
g.fillRect(x, y, width, height);
}
}
public class Circle {
public Circle(Graphics g, int diameter, int x, int y){
g.setColor(Color.RED);
g.fillOval(x, y, diameter, diameter);
}
}
public class Triangle {
public Triangle(Graphics g, int width, int height, int x, int y){
Polygon triangle = new Polygon();
triangle.addPoint(x+width/2, y);
triangle.addPoint(x, height+y);
triangle.addPoint(x+width, height+y);
g.setColor(Color.RED);
g.fillPolygon(triangle);
}
}
public Square(Graphics g, int width, int height, int x, int y){
g.setColor(Color.RED);
g.fillRect(x, y, width, height);
}
}
public class Circle {
public Circle(Graphics g, int diameter, int x, int y){
g.setColor(Color.RED);
g.fillOval(x, y, diameter, diameter);
}
}
public class Triangle {
public Triangle(Graphics g, int width, int height, int x, int y){
Polygon triangle = new Polygon();
triangle.addPoint(x+width/2, y);
triangle.addPoint(x, height+y);
triangle.addPoint(x+width, height+y);
g.setColor(Color.RED);
g.fillPolygon(triangle);
}
}
Jag har även skapat en klass som ritar upp objekten samt implementerar muslyssnare:
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.JPanel;
public class MyDraggableComponent extends JPanel {
private Square S;
private Circle C;
private Triangle T;
// rita en cirkel, en kvadrat, samt en triangel
@Override
public void paintComponent(Graphics g) {
if (Shape == "S") {
S = new Square(g, 100, 100, 0, 0);
} else if (Shape == "C"){
C = new Circle(g, 100, 0, 0);
} else if (Shape == "T"){
T = new Triangle(g, 100, 100, 0, 0, true);
}
}
private volatile int screenX = 0;
private volatile int screenY = 0;
private volatile int myX = 0;
private volatile int myY = 0;
private String Shape; // FORM
public MyDraggableComponent(int h, int w, String Shapevalue) {
// ange vilken form som ska skapas
Shape = Shapevalue;
setBackground(Color.WHITE);
setBounds(0, 0, h, w);
setOpaque(false);
addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) { }
@Override
public void mousePressed(MouseEvent e) {
screenX = e.getXOnScreen();
screenY = e.getYOnScreen();
myX = getX();
myY = getY();
}
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
});
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
int deltaX = e.getXOnScreen() - screenX;
int deltaY = e.getYOnScreen() - screenY;
setLocation(myX + deltaX, myY + deltaY);
}
@Override
public void mouseMoved(MouseEvent e) { }
});
}
}
import java.awt.event.*;
import javax.swing.JPanel;
public class MyDraggableComponent extends JPanel {
private Square S;
private Circle C;
private Triangle T;
// rita en cirkel, en kvadrat, samt en triangel
@Override
public void paintComponent(Graphics g) {
if (Shape == "S") {
S = new Square(g, 100, 100, 0, 0);
} else if (Shape == "C"){
C = new Circle(g, 100, 0, 0);
} else if (Shape == "T"){
T = new Triangle(g, 100, 100, 0, 0, true);
}
}
private volatile int screenX = 0;
private volatile int screenY = 0;
private volatile int myX = 0;
private volatile int myY = 0;
private String Shape; // FORM
public MyDraggableComponent(int h, int w, String Shapevalue) {
// ange vilken form som ska skapas
Shape = Shapevalue;
setBackground(Color.WHITE);
setBounds(0, 0, h, w);
setOpaque(false);
addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) { }
@Override
public void mousePressed(MouseEvent e) {
screenX = e.getXOnScreen();
screenY = e.getYOnScreen();
myX = getX();
myY = getY();
}
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
});
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
int deltaX = e.getXOnScreen() - screenX;
int deltaY = e.getYOnScreen() - screenY;
setLocation(myX + deltaX, myY + deltaY);
}
@Override
public void mouseMoved(MouseEvent e) { }
});
}
}
Slutligen har jag en klass som innehåller main-funktionen och skapar objekten som ska adderas på skärmen:
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Mitt_program{
public static void main(String[] args) {
JFrame f = new JFrame("Uppgift 3");
f.setLayout(null);
// skapa en cirkel, en kvadrat samt en triangel
MyDraggableComponent Shape1 = new MyDraggableComponent(100, 100, "C");
MyDraggableComponent Shape2 = new MyDraggableComponent(99, 99, "S");
MyDraggableComponent Shape3 = new MyDraggableComponent(101, 101, "T");
// addera objekten
f.add(Shape1);
f.add(Shape2);
f.add(Shape3);
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
f.setVisible(true);
}
}
import javax.swing.JPanel;
public class Mitt_program{
public static void main(String[] args) {
JFrame f = new JFrame("Uppgift 3");
f.setLayout(null);
// skapa en cirkel, en kvadrat samt en triangel
MyDraggableComponent Shape1 = new MyDraggableComponent(100, 100, "C");
MyDraggableComponent Shape2 = new MyDraggableComponent(99, 99, "S");
MyDraggableComponent Shape3 = new MyDraggableComponent(101, 101, "T");
// addera objekten
f.add(Shape1);
f.add(Shape2);
f.add(Shape3);
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
f.setVisible(true);
}
}
Problemen här är dock:
- Jag vill att den figur som flyttas ska placeras över andra figurer på samma ställe.
- Jag vill att området "runt omkring" en figur ej ska reagera vid klick, dvs. man ska ej kunna flytta en figur om man inte markerar själva figurområdet.
Finns här någon Java-kunnig som vill hjälpa mig?