aufgerufen habe Hier habe ich ein Problem Ich möchte, dass Sie mir helfen zu lösen. Vielen Dank an alle, die dies wünschen.Grafikobjekt sind nicht sichtbar, wenn ich Repaint-Methode
Ich habe Objekte, die von der JComponent
Klasse erben, zu der ich eine MouseListener
hinzugefügt habe.
Ich habe ein Gitter, das ein Panel erbt.
Ich möchte die Objekte einzeln im Raster hinzufügen, so dass in meinem Raster mindestens 2 Formen ähnlich oder unterschiedlich sind. Während des Hinzufügens möchte ich, dass dies an einer bestimmten Position geschieht (die, auf die wir gerade geklickt haben), während die Objekte des Typs JComponents
einander nicht übereinander gestapelt werden oder dass ihr Schnittpunkt etwas anderes als den leeren Satz oder den geraden Teil ergibt (a Segment). Um seine Ärgernisse zu vermeiden, denke ich, dass, wenn Sie nach dem Klicken in/auf dem Gitter hinzufügen, überprüfen, ob der Punkt nicht bereits in einem Objekt JComponent
erbt und wenn die Anzahl der Kästchen ist genug. Aber es funktioniert immer noch nicht. Auch wenn das hinzuzufügende Objekt nicht im Raster erscheint (die Implementierung ist in der GrilleIHM#mouseClicked
Methode).
Ich habe versucht, das Verhalten von Objekten auf Klick zu zentralisieren, indem eine Klasse nur für die statt mit dem gleichen Stück Code in all meinen Formen (I 8), aber ohne Erfolg zu schaffen. also habe ich diese Idee aufgegeben.
Als Null in Java habe ich so weit durch die Tutorials und Foren fortgeschritten. Aber nach zwanzig Tagen komme ich gar nicht weiter.
Ich weiß, dass ich auf einmal zu viel verlangen, aber jetzt nicht mehr ich eine Lösung finden.
Vielen Dank für Ihre Hilfe.
, dass mein Code ist:
public class GrilleIHM extends JFrame implements MouseListener {
private static final long serialVersionUID = 5592120196313024461L;
private String typeF;
private Forme22 f1 = new Forme22(20,20);
private Forme2 f2 = new Forme2(20,20);
private Forme3 f3 = new Forme3(20,20);
private Forme3_1 f4 = new Forme3_1(20,20);
private Forme4 f5 = new Forme4(20,20);
private Forme5 f6 = new Forme5(20,20);
private Forme6 f7 = new Forme6(20,20);
private Former f8 = new Former(20,20);
private int n;
private int m;
private int o;
private int p;
private boolean startmyGame = false;
private boolean bpause = false;
private boolean breprendre = false;
private JButton startGame = new JButton("Commencer");
private JButton pause = new JButton("Pause");
private JButton reprendre = new JButton("Redémarrer");
private Font maFont = new Font("Arial", Font.CENTER_BASELINE, 15);
private FlowLayout experimentLayout = new FlowLayout();
private JPanel panelinfo = new JPanel();
private Grille magrille ;
private boolean clickgrill;
private int nbCaseVide;
private int nbCGrille;
public GrilleIHM(int nbCX, int nbCY, int nbF, int nbCMax) {
super();
this.m = nbCY;
this.n = nbCX;
this.o = nbF;
this.p = nbCMax;
createAndShowGUI();
}
private void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Grille IHM ou Agencement");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents(frame.getContentPane());
frame.addMouseListener(this);
frame.pack();
frame.setVisible(true);
}
private void initComponents(Container pane) {
magrille = new Grille(this.n, this.m);
magrille.addMouseListener(this);
//les menu horizotal
panelinfo.setPreferredSize(new Dimension(400,400));
// menu vertical
JPanel panel = new JPanel();
BoxLayout box = new BoxLayout(panel, BoxLayout.Y_AXIS);
// pane.addMouseListener(new MyMouseOneJComponents());
// box.
panel.setLayout(box);
panel.setPreferredSize(new Dimension(120, 20));
panel.setAlignmentX(20);
startGame.setMaximumSize(
new Dimension(Integer.MAX_VALUE,
startGame.getMinimumSize().height));
pause.setMaximumSize(
new Dimension(Integer.MAX_VALUE,
pause.getMinimumSize().height));
reprendre.setMaximumSize(
new Dimension(Integer.MAX_VALUE,
reprendre.getMinimumSize().height));
reprendre.setFont(maFont);
pause.setFont(maFont);
startGame.setFont(maFont);
startGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
startGameActionPerformed(evt);
}
});
reprendre.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
reprendreGameActionPerformed(evt);
}
});
pause.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
pauseGameActionPerformed(evt);
}
});
//reprendre.set
panel.add(startGame);
panel.add(reprendre);
panel.add(pause);
final JPanel compsToExperiment = new JPanel();
compsToExperiment.setLayout(experimentLayout);
experimentLayout.setAlignment(FlowLayout.TRAILING);
switch (this.p) {
case 2:
pane.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
f2.setPreferredSize(new Dimension(120, 120));
pane.add(panel, BorderLayout.EAST);
pane.add(f2, BorderLayout.NORTH);
magrille.setPreferredSize(
new Dimension(20*magrille.getNbCaseX(),
20*magrille.getNbCaseY()));
pane.add(magrille, BorderLayout.CENTER);
pane.add(panelinfo, BorderLayout.WEST);
// p;
f2.validate();
f2.repaint();
panel.validate();
panel.repaint();
magrille.validate();
magrille.repaint();
break;
case 3:
compsToExperiment.add(f2);
compsToExperiment.add(f3);
compsToExperiment.add(f4);
f2.setPreferredSize(new Dimension(120, 120));
f3.setPreferredSize(new Dimension(120, 120));
f4.setPreferredSize(new Dimension(120, 120));
pane.add(panel, BorderLayout.EAST);
pane.add(compsToExperiment, BorderLayout.NORTH);
magrille.setPreferredSize(
new Dimension(20*magrille.getNbCaseX(),
20*magrille.getNbCaseY()));
pane.add(magrille, BorderLayout.CENTER);
pane.add(panelinfo, BorderLayout.WEST);
// p;
f2.validate();
f2.repaint();
f3.validate();
f3.repaint();
f4.validate();
f4.repaint();
panel.validate();
panel.repaint();
magrille.validate();
magrille.repaint();
break;
case 4:
case 5:
case 6:
compsToExperiment.add(f2);
compsToExperiment.add(f3);
compsToExperiment.add(f4);
compsToExperiment.add(f1);
compsToExperiment.add(f5);
f1.setPreferredSize(new Dimension(120, 120));
f2.setPreferredSize(new Dimension(120, 120));
f3.setPreferredSize(new Dimension(120, 120));
f4.setPreferredSize(new Dimension(120, 120));
f5.setPreferredSize(new Dimension(120, 120));
pane.add(panel, BorderLayout.EAST);
pane.add(compsToExperiment, BorderLayout.NORTH);
magrille.setPreferredSize(
new Dimension(20*magrille.getNbCaseX(),
20*magrille.getNbCaseY()));
pane.add(magrille, BorderLayout.CENTER);
pane.add(panelinfo, BorderLayout.WEST);
// p;
f2.validate();
f2.repaint();
f3.validate();
f3.repaint();
f4.validate();
f4.repaint();
f1.validate();
f1.repaint();
f5.validate();
f5.repaint();
panel.validate();
panel.repaint();
magrille.validate();
magrille.repaint();
break;
case 7:
compsToExperiment.add(f2);
compsToExperiment.add(f3);
compsToExperiment.add(f4);
compsToExperiment.add(f1);
compsToExperiment.add(f5);
compsToExperiment.add(f8);
f1.setPreferredSize(new Dimension(120, 120));
f2.setPreferredSize(new Dimension(120, 120));
f3.setPreferredSize(new Dimension(120, 120));
f4.setPreferredSize(new Dimension(120, 120));
f5.setPreferredSize(new Dimension(120, 120));
f8.setPreferredSize(new Dimension(120, 120));
pane.add(panel, BorderLayout.EAST);
pane.add(compsToExperiment, BorderLayout.NORTH);
magrille.setPreferredSize(
new Dimension(20*magrille.getNbCaseX(),
20*magrille.getNbCaseY()));
pane.add(magrille, BorderLayout.CENTER);
pane.add(panelinfo, BorderLayout.WEST);
// p;
f2.validate();
f2.repaint();
f3.validate();
f3.repaint();
f4.validate();
f4.repaint();
f1.validate();
f1.repaint();
f5.validate();
f5.repaint();
f8.validate();
f8.repaint();
panel.validate();
panel.repaint();
magrille.validate();
magrille.repaint();
break;
default:
compsToExperiment.add(f2);
compsToExperiment.add(f3);
compsToExperiment.add(f4);
compsToExperiment.add(f1);
compsToExperiment.add(f5);
compsToExperiment.add(f8);
compsToExperiment.add(f6);
compsToExperiment.add(f7);
f1.setPreferredSize(new Dimension(120, 120));
f2.setPreferredSize(new Dimension(120, 120));
f3.setPreferredSize(new Dimension(120, 120));
f4.setPreferredSize(new Dimension(120, 120));
f5.setPreferredSize(new Dimension(120, 120));
f8.setPreferredSize(new Dimension(120, 120));
f6.setPreferredSize(new Dimension(120, 120));
f7.setPreferredSize(new Dimension(120, 120));
pane.add(panel, BorderLayout.EAST);
pane.add(compsToExperiment, BorderLayout.NORTH);
magrille.setPreferredSize(
new Dimension(20*magrille.getNbCaseX(),
20*magrille.getNbCaseY()));
pane.add(magrille, BorderLayout.CENTER);
pane.add(panelinfo, BorderLayout.WEST);
// p;
f2.validate();
f2.repaint();
f3.validate();
f3.repaint();
f4.validate();
f4.repaint();
f1.validate();
f1.repaint();
f5.validate();
f5.repaint();
f8.validate();
f8.repaint();
f6.validate();
f6.repaint();
f7.validate();
f7.repaint();
panel.validate();
panel.repaint();
magrille.validate();
magrille.repaint();
break;
}
//les menu horizontal
}
public int getO() {
return o;
}
public void setO(int o) {
this.o = o;
}
@Override
public void mouseClicked(MouseEvent evt) {
magrille.setLayout(null);
int valX=evt.getX();
int valY=evt.getY();
System.out.println(valX);
System.out.println(valY);
JComponent f11;
if (f1.getTypeF()!=null && getO()>=0) {
typeF=f1.getTypeF();
f1.setTypeF(null);
if (f1.isInForme(valX, valY)==false
&& f2.isInForme(valX, valY)==false
&& f3.isInForme(valX, valY)==false
&& f4.isInForme(valX, valY)==false
&& f5.isInForme(valX, valY)==false
&& f6.isInForme(valX, valY)==false
&& f7.isInForme(valX, valY)== false
&& f8.isInForme(valX, valY)==false) {
if (magrille.getNbCGrille()> magrille.getNbCaseOccupe()) {
System.out.println(" nbVideSuffissant");
f11= new Forme2((int)valX,(int)valY);
System.out.println(" ab grille = "+ valX);
System.out.println("ord grille = " + valY);
System.out.println(" ord création objet");
// f11.paint();
//f11.validate();
magrille.add(f11);
f11.setBounds(valX, valY, 40, 40);
f11.validate();
f11.repaint();
magrille.revalidate();
magrille.repaint();
this.validate();
this.repaint();
//validate();
//magrille.notify();
//repaint();
//revalidate();
magrille.setNbCaseOccupe(f1.getNbCase());
// magrille.repaint();
System.out.println(magrille.getNbCaseOccupe());
//repaint();
setO(getO()- 1);
System.out.println(getO());
}
}
System.out.println("click ok");
///evt.getComponent().
}
}
public int getNbCGrille() {
return this.n* this.m;
}
public void setNbCGrille(int nbCasX, int nbCasY) {
this.nbCGrille = nbCasX*nbCasY;
}
public int getNbCaseVide() {
return nbCaseVide;
}
public void setNbCaseVide(int nbCaseVide) {
this.nbCaseVide =getNbCGrille() - nbCaseVide;
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
// on regarde quelle forme a été cliqué puis on initialise sa valeur cliqué a true;
// (we see what form was clicked on and we initialize his clicked value to true)
@Override
public void mousePressed(MouseEvent evt) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stu
}
private void pauseGameActionPerformed(ActionEvent evt) {
// TODO Auto-generated method stub
bpause=true;
}
private void reprendreGameActionPerformed(ActionEvent evt) {
// TODO Auto-generated method stub
}
private void startGameActionPerformed(ActionEvent evt) {
// TODO Auto-generated method stub
startmyGame=true;
if (startmyGame==true) {
magrille.addMouseListener(this);
}
bpause=false;
breprendre=false;
}
}
Klasse Forme22:
public class Forme22 extends JComponent implements MouseListener {
private static final long serialVersionUID = -8557188538997741713L;
private static final int taillC = 20;
// x et y = coordonée du point cliqué
private int abs;
private int ord;
private double tab[][];
private Color col;
private int nbCase=4;
private String typeF;
private boolean click=false;
public Forme22(int abs, int ord) {
super();
this.abs = abs;
this.ord = ord;
this.col=Color.gray;
tab= new double [2][2];
addMouseListener((MouseListener) this);
}
public void paint (Graphics gr){
Graphics2D g= (Graphics2D)gr;
for (int i = 0; i < this.tab[0].length; i++) {
for (int k=0; k <this.tab.length; k++) {
g.setColor(col);
Rectangle2D.Double rect =
new Rectangle2D.Double(this.abs+i*taillC,
this.ord+k*taillC,
taillC,
taillC);
g.fill(rect);
g.setColor(Color.black);
g.draw(rect);
}
}
}
public boolean isInForme(int valX, int valY){
return ((this.abs <= (int)valX)
&& (this.abs+2*taillC >= (int)valX)
&& (this.ord <= (int)valY)
&& (this.ord+2*taillC >= (int)valY));
}
public String getCol() {
return "gray";
}
public void setCol(Color col) {
this.col = col;
}
public int getNbCase() {
return nbCase;
}
public void setNbCase(int nbCase) {
this.nbCase = nbCase;
}
public boolean isClick() {
return click;
}
public void setClick(boolean click) {
this.click = click;
}
public int getAbs() {
return abs;
}
public void setAbs(int abs) {
this.abs = abs;
}
public int getOrd() {
return ord;
}
public void setOrd(int ord) {
this.ord = ord;
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
// ajout du mouselistener dans les formes au survol des JComposants
// (Adding of mouselistener in forms on hover on JComponants)
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
//recuperation coordonnée endroits cliquée
int x=e.getX();
int y =e.getY();
// memeorisation des nouveaux coordonées pour les récupéré depuis la grille en créant un point;
// (saving new coordinates for gather them from the grid during creating a point)
Point p=new Point(x, y);
setTypeF("forme22");
setClick(true);
}
public String getTypeF() {
return typeF;
}
public void setTypeF(String typeF) {
this.typeF = typeF;
}
}
* Null ist in Java, ich habe bisher durch die voran Tutorials und Foren. Aber nach 20 Tagen komme ich gar nicht weiter. * Finde einen Tutor und sei bereit, 2000 Tage Java zu lernen und zu programmieren. –