...
pane = getContentPane();
pane.setLayout(null);
Spielbrett.setBounds(10,10,400,400);
Spielfigur.setBounds(410,410,40,40);
pane.add(Spielbrett);
pane.add(Spielfigur);
...
public class Fenster extends JFrame
{
public Fenster()
{
setSize(600,600);
getContentPane().setLayout(null);
pane = getContentPane();
pane.setLayout(null);
Spielbrett.setBounds(10,10,400,400);
Spielfigur.setBounds(410,410,40,40);
pane.add(Spielbrett);
pane.add(Spielfigur);
setVisible(true);
}
public static void main (String argv[])
{
new Fenster();
}
}
public class MainWindow extends JFrame{
public MainWindow(){
//erstellt ein Frame
super("Muehle");
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
//ob das Aussehen des Fensters verändert werden soll
JFrame.setDefaultLookAndFeelDecorated(false);
this.getContentPane().setBackground(Color.LIGHT_GRAY);
this.getContentPane().setMaximumSize(windowScreensize);
//gibt die Größe des Frames an und macht es sichtbar
this.setBounds(0, 0, windowScreensize.width, windowScreensize.height);
SteinZeichnen stein = new SteinZeichnen();
SpielBrett brett = new SpielBrett();
this.getContentPane().add(stein);
//this.getContentPane().add(brett);
this.setVisible(true);
//Aufruf der Klasse CloseWindow zum Schließen des Fensters und des Prozesses
this.addWindowListener(new CloseWindow());
}
}
this.getContentPane().add(stein, BorderLayout.NORTH);
Achja, was im CENTER ist, das dehnt sich immer aus um allen verfügbaren Platz einzunehmen.Mr.Bean hat gesagt.:Nun setzt er immer nur das, was im Zentrum "BorderLayout.Center" liegt in den Vordergrund..
stein.setPreferredSize(..) oder in der Klasse selbst, dort könntest du auch getPreferredSize überschreiben.Mr.Bean hat gesagt.:Wo kann ich das denn einsetzen?
Mr.Bean hat gesagt.:Größe und Lage schon in der jeweiligen Klasse selbst festgelegt habe..., oder?
Mr.Bean hat gesagt.:eine Lösung die mir die Stein links und das Brett rechts darstellt
Mr.Bean hat gesagt.:das ich natürlich hinterher die Steine auf das Brett verschieben kann...
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Zeichne Brett
for (Stein stein : aktuelleSteine)
stein.paint(g, /*x-Koordinate*/, /*y-Koordinate*/);
}
class SteinZeichnen extends JPanel
{
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
int mitteX = windowScreensize.width / 2;
int mitteY = windowScreensize.height / 2;
private Spielsteine stein = new Spielsteine(mitteX+windowScreensize.width / 3,mitteY);
private Spielsteine selectedKreis = null;
private Cursor CURSOR_MOVE = new Cursor(Cursor.MOVE_CURSOR);
private MouseListener mouseListener = new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
stein = findKreis(e.getX(), e.getY());
if (stein != null)
{
selectedKreis = stein;
repaint();
//getContentPane().setCursor(CURSOR_MOVE);
}
}
public void mouseReleased(MouseEvent e)
{
selectedKreis = null;
//getContentPane().setCursor(CURSOR_DEF);
repaint();
}
};
private MouseMotionListener motionListener = new MouseMotionListener()
{
public void mouseMoved(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e) {
if (selectedKreis != null)
{
// koordinaten des kreis ändern
selectedKreis.setX(e.getX());
selectedKreis.setY(e.getY());
repaint();
}
}
};
public Spielsteine findKreis(int x, int y)
{
if (stein.containsPoint(x, y))
{
return stein;
}
return null;
}
public void paint(Graphics g)
{
//Typcasting von Graphics zu Graphics2D
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
g2d.fillOval(stein.getX(), stein.getY(), stein.getRadius(), stein.getRadius());
}
}
package muehle;
/*
* MainWindow.java
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class MainWindow extends JFrame{
public MainWindow(){
//erstellt ein Frame
super("Muehle");
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
//ob das Aussehen des Fensters verändert werden soll
JFrame.setDefaultLookAndFeelDecorated(false);
this.getContentPane().setBackground(Color.LIGHT_GRAY);
this.getContentPane().setMaximumSize(windowScreensize);
//gibt die Größe des Frames an und macht es sichtbar
this.setBounds(0, 0, windowScreensize.width, windowScreensize.height);
SpielBrett brett = new SpielBrett();
for (int i = 0; i < 9; i++) {
brett.add(new SteinZeichnen(Color.WHITE));
brett.add(new SteinZeichnen(Color.BLACK));
}
this.getContentPane().add(brett);
this.setVisible(true);
//Aufruf der Klasse CloseWindow zum Schließen des Fensters und des Prozesses
this.addWindowListener(new CloseWindow());
}
public static void main(String[] args) {new MainWindow();}
class CloseWindow extends WindowAdapter{
public void windowClosing(WindowEvent e) {
dispose();
}
}
}
/*
* SteinZeichnen
*/
class SteinZeichnen extends JPanel {
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
int mitteX = windowScreensize.width / 2;
int mitteY = windowScreensize.height / 2;
private Spielsteine stein = new Spielsteine(mitteX+windowScreensize.width / 3,mitteY);
private Spielsteine selectedKreis = null;
private Cursor CURSOR_MOVE = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);
private Cursor CURSOR_DEF = Cursor.getDefaultCursor();
private int deltaX, deltaY;
private Color color;
private MouseListener mouseListener = new MouseListener() {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
stein = findKreis(e.getX() + getX(), e.getY() + getY());
if (stein != null) {
selectedKreis = stein;
deltaX = e.getX()+getX() - stein.getX();
deltaY = e.getY()+getY() - stein.getY();
setCursor(CURSOR_MOVE);
}
}
public void mouseReleased(MouseEvent e) {
selectedKreis = null;
setCursor(CURSOR_DEF);
}
};
private MouseMotionListener motionListener = new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {
if (selectedKreis != null) {
// koordinaten des kreis ändern
selectedKreis.setX(e.getX()+getX() - deltaX);
selectedKreis.setY(e.getY()+getY() - deltaY);
setLocation(selectedKreis.getX(), selectedKreis.getY());
}
}
};
public SteinZeichnen(Color color){
this.color = color;
setOpaque(false);
setBounds(stein.getX(), stein.getY(), stein.getRadius(), stein.getRadius());
addMouseListener(mouseListener);
addMouseMotionListener(motionListener);
}
public Spielsteine findKreis(int x, int y) {
if (stein.containsPoint(x, y)) {
return stein;
}
return null;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
//Typcasting von Graphics zu Graphics2D
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(color);
g2d.fillOval(0, 0, stein.getRadius(), stein.getRadius());
}
}
/*
* Spielsteine
*/
class Spielsteine{
private int x;
private int y;
private int r = 60;
public Spielsteine(int x, int y){
this.x = x;
this.y = y;
}
void setX(int i) {x = i;}
void setY(int i) {y = i;}
boolean containsPoint(int xP, int yP) {
return (xP >= x && xP <= x+r && yP >= y && yP <= y+r);
}
int getX() {return x;}
int getY() {return y;}
int getRadius() {
return r;
}
}
/*
* SpielBrett
*/
class SpielBrett extends JPanel{
private BufferedImage img;
private Graphics2D g2d;
int s;
public SpielBrett(){
s = (Toolkit.getDefaultToolkit().getScreenSize().height-50) / 8;
setLayout(null);
setBackground(Color.ORANGE);
}
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
if (img == null) {
img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
g2d = (Graphics2D)img.getGraphics();
g2d.setColor(getBackground());
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setColor(Color.black);
drawMe();
}
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
}
private void drawMe(){
g2d.setColor(Color.BLUE);
g2d.setStroke(new BasicStroke(4f));
g2d.drawRect(1*s, 1*s, 6*s, 6*s);
g2d.drawRect(2*s, 2*s, 4*s, 4*s);
g2d.drawRect(3*s, 3*s, 2*s, 2*s);
g2d.drawLine(1*s, 4*s, 3*s, 4*s);
g2d.drawLine(5*s, 4*s, 7*s, 4*s);
g2d.drawLine(4*s, 1*s, 4*s, 3*s);
g2d.drawLine(4*s, 5*s, 4*s, 7*s);
}
}
Steine nicht von JPanel erben lassen.Leroy42 hat gesagt.:Ich würde den Steinen eine eigene paint-Methode verpassen,
die ein Graphics und die Koordinaten, an denen sie sich ins
Graphic malen sollen, übergeben bekommen und nicht
von JPanel abeleitet sind.
public class Brett {
Stein[] steine = new Stein[5];
public Brett() {
for(int i = 0; i < steine.length; i++) {
steine[i] = new Stein();
steine[i].setLocation(200, i*10);
}
}
public void paint(Graphics g) {
//Code für das Brett selbst:
//...
//Hier werden die Steine dargestellt:
for(int i = 0; i < steine.length; i++) {
steine[i].paint(g);
}
}
public class Stein {
int x, y;
public void paint(Graphics g) {
//Code
}
public void setLocation(int x, int y) {
this.x = x;
this.y = y;
}
}
Mit paintComponent (statt paint) ist das kein Problem.Mr.Bean hat gesagt.:..Leider besteht auch mit deiner Lösung immer noch das Problem, das ich die Komponente Stein nicht auf die Komponente Brett legen kann, sprich ich nur eines von beiden darstellen kann (immer das zuläßt aufgerufene)..
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JPanel;
public class SpielBrett extends JPanel {
public SpielBrett(){
setLayout(null);
setBackground(Color.ORANGE);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
//Typcasting von Graphics zu Graphics2D
Graphics2D g2d = (Graphics2D)g;
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
int mitteX = windowScreensize.width / 2;
int mitteY = windowScreensize.height / 2;
//Farbe der Grafik
g2d.setColor(Color.BLACK);
//Dicke der Linien
Stroke stroke = new BasicStroke( 8 );
g2d.setStroke( stroke );
//drei Rechecke werden gesetzt
g2d.setPaint(Color.white);
g2d.fillRect(mitteX - windowScreensize.width/3, mitteX - windowScreensize.width/3, windowScreensize.width / 2, windowScreensize.width/2);
g2d.setPaint(Color.BLACK);
g2d.drawRect(mitteX - windowScreensize.width/6, mitteX - windowScreensize.width/6, windowScreensize.width / 6, windowScreensize.width / 6);
g2d.drawRect(mitteX - windowScreensize.width/4, mitteX - windowScreensize.width/4, windowScreensize.width / 3, windowScreensize.width / 3);
g2d.drawRect(mitteX - windowScreensize.width/3, mitteX - windowScreensize.width/3, windowScreensize.width / 2, windowScreensize.width/2);
//alle mögichen gekreutzten Setzpunkte
//von Mitte links aussen nach Mitte links innen
g2d.drawLine(mitteX - windowScreensize.width/3, (mitteX - windowScreensize.width/3)+((windowScreensize.width / 2)/2)-1, mitteX - windowScreensize.width/6, (mitteX - windowScreensize.width/6)+((windowScreensize.width / 6))/2);
//von Mitte rechts aussen nach Mitte rechts innen
g2d.drawLine((mitteX - windowScreensize.width/3)+ windowScreensize.width / 2, (mitteX - windowScreensize.width/3)+((windowScreensize.width / 2)/2)-1, (mitteX - windowScreensize.width/6)+windowScreensize.width / 6, (mitteX - windowScreensize.width/6)+((windowScreensize.width / 6))/2);
//von Mitte oben aussen nach Mitte oben innen
g2d.drawLine((mitteX - windowScreensize.width/3)+((windowScreensize.width / 2)/2)-1, (mitteX - windowScreensize.width/3), (mitteX - windowScreensize.width/6)+((windowScreensize.width / 6))/2, (mitteX - windowScreensize.width/6));
//von Mitte unten aussen nach Mitte unten innen
g2d.drawLine((mitteX - windowScreensize.width/3)+ (windowScreensize.width / 2)/2-1, (mitteX - windowScreensize.width/3)+windowScreensize.width / 2, (mitteX - windowScreensize.width/6)+(windowScreensize.width / 6)/2, (mitteX - windowScreensize.width/6)+windowScreensize.width / 6);
}
}
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.List;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import javax.swing.JComponent;
import javax.swing.JPanel;
class SteinZeichnen extends JPanel
{
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
//der Mittelpunkt des Fensters
int mitteX = windowScreensize.width / 2;
int mitteY = windowScreensize.height / 2;
//Anlegen eines neuen Steines
//private Spielsteine stein = new Spielsteine(mitteX+windowScreensize.width / 3,mitteY);
private Spielsteine stein = new Spielsteine();
//Anlegen eines leeren Kreiselementes
private Spielsteine selectedKreis = null;
//Anlegen von Cursorobjekten
private Cursor cursorHand = new Cursor(Cursor.HAND_CURSOR);
private Cursor cursorDef = new Cursor(Cursor.DEFAULT_CURSOR);
//Colorobjekt zur Unterscheidung der Spielsteine
private Color color;
private MouseListener mouseListener = new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
//wenn die Maus gedrueckt wird und ein Kreis sich innerhalb der Koordinaten befindet,
//dann setze diesen Stein auf stein
stein = findKreis(e.getX(), e.getY());
//wenn stein nicht leer, dann Zeichne bei gedrückte Maus den Stein neu
if (stein != null)
{
selectedKreis = stein;
//neuzeichnen des Kreises
repaint();
getRootPane().setCursor(cursorHand);
}
}
//wenn die Maus losgelassen wird soll der markierte Kreis wieder auf Null gesetzt werden und
public void mouseReleased(MouseEvent e)
{
selectedKreis = null;
getRootPane().setCursor(cursorDef);
//neuzeichnen des Kreises
repaint();
}
};
private MouseMotionListener motionListener = new MouseMotionListener()
{
public void mouseMoved(MouseEvent e)
{
}
//wenn Maus in Bewegung, dann zeichne den Kreis für die aktuellen Koordinaten neu
public void mouseDragged(MouseEvent e) {
if (selectedKreis != null)
{
// Koordinaten des kreis ändern
selectedKreis.setX(e.getX());
selectedKreis.setY(e.getY());
repaint();
}
}
};
//Konstruktor für das Stein zeichnen
public SteinZeichnen(int x, int y,Color color){
this.color = color;
stein.setX(x);
stein.setY(y);
setOpaque(false);
setBounds(stein.getX(), stein.getY(), stein.getRadius(), stein.getRadius());
addMouseListener(mouseListener);
addMouseMotionListener(motionListener);
}
public Spielsteine findKreis(int x, int y)
{
//überprüft, ob der Mauszeiger innerhalb des Steines ist
if (stein.containsPoint(x, y))
{
return stein;
}
return null;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//Typcasting von Graphics zu Graphics2D
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(color);
g2d.fillOval(stein.getX(), stein.getY(), stein.getRadius(), stein.getRadius());
g2d.setColor(Color.BLACK);
g2d.drawOval(stein.getX(), stein.getY(), stein.getRadius(), stein.getRadius());
g2d.setColor(Color.BLACK);
g2d.drawOval(stein.getX()+6, stein.getY()+6, stein.getInnenRadius(), stein.getInnenRadius());
}
}
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
public class MainWindow extends JFrame{
public MainWindow(){
//erstellt ein Frame
super("Muehle");
//Ermittelt die bestehende Auflösung des Betriebsystems
Dimension windowScreensize = Toolkit.getDefaultToolkit().getScreenSize();
//der Mittelpunkt des Fensters
int mitteX = windowScreensize.width / 2;
int mitteY = windowScreensize.height / 2;
//ob das Aussehen des Fensters verändert werden soll
JFrame.setDefaultLookAndFeelDecorated(false);
this.getContentPane().setBackground(Color.LIGHT_GRAY);
this.getContentPane().setMaximumSize(windowScreensize);
//gibt die Größe des Frames an und macht es sichtbar
this.setBounds(0, 0, windowScreensize.width, windowScreensize.height);
SpielBrett brett = new SpielBrett();
brett.add(new SteinZeichnen((mitteX+windowScreensize.width / 3)+windowScreensize.width / 17,mitteY,Color.ORANGE));
this.getContentPane().add(brett);
this.setVisible(true);
//SteinZeichnen stein = new SteinZeichnen(Color.WHITE);
//SpielBrett brett = new SpielBrett();
//for (int i = 0; i < 9; i++) {
//this.getContentPane().add(new SteinZeichnen(mitteX+windowScreensize.width / 3,mitteY,Color.WHITE));
//brett.add(new SteinZeichnen((mitteX+windowScreensize.width / 3)+windowScreensize.width / 17,mitteY,Color.ORANGE));
//}
//brett.add(stein);
//this.getContentPane().add(brett);
//this.setVisible(true);
//Aufruf der Klasse CloseWindow zum Schließen des Fensters und des Prozesses
this.addWindowListener(new CloseWindow());
}
So ist es.Mr.Bean hat gesagt.:..vielleicht ist es ja nur eine Kleinigkeit..
Du hast ein funktionierendes Beispiel bekommen!Mr.Bean hat gesagt.:..nur reagiert dieser Kreis jetzt nicht mehr auf meine Mouseaktionen... :?: