Voici un simple programme graphique qui ajoute quelques étoiles à l'écran.JButton, JCheckBox et interacteurs similaires ne changent pas visuellement
import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This program creates a five-pointed star every time the
* user clicks the mouse on the canvas.
*/
public class DrawStarMap1 extends GraphicsProgram {
public void init() {
/* Initializes the mouse listeners */
addMouseListeners();
/* The check box starts out in the "on" position */
fillCheckBox = new JCheckBox("Filled");
fillCheckBox.setSelected(true);
add(fillCheckBox, SOUTH);
/* Clears the screen with a button */
add(new JButton("Clear"), SOUTH);
addActionListeners();
}
/* Called whenever the user clicks the mouse.*/
public void mouseClicked(MouseEvent e) {
GStar star = new GStar(STAR_SIZE);
star.setFilled(fillCheckBox.isSelected());
add (star, e.getX(), e.getY());
}
/* Removes all the graphical objects from the canvas */
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Clear")) removeAll();
}
/* Private constants */
private static final double STAR_SIZE = 20;
private JCheckBox fillCheckBox;
}
Et la classe GStar:
import acm.graphics.*;
/** Defines a new GObject class t:hat appears as a five-pointed star.
*/
public class GStar extends GPolygon {
/** Creates a new GStar centered at the origin with the specified
* horizontal width.
* @param width The width of the star
*/
public GStar(double width) {
double dx = width/2;
double dy = dx * GMath.tanDegrees(18);
double edge = width/2 - dy * GMath.tanDegrees(36);
addVertex(-dx, -dy);
int angle = 0;
for (int i = 0; i < 5; i++) {
addPolarEdge(edge, angle);
addPolarEdge(edge, angle + 72);
angle -= 72;
}
}
}
Le programme fonctionne très bien et utilise un constructeur de classe GStar pour créer une étoile à chaque fois que l'utilisateur clique sur la souris sur la toile. Mais, il y a un problème: "JCheckBox et JButton ne changent jamais visuellement!". Quand j'appuie sur le bouton JButton "Effacer", la toile devient vide mais le bouton ne semble pas basculer. De même le programme dessine à la fois des étoiles remplies et vides mais le JCheckBox "Filled" reste toujours sélectionné, il ne change pas. Le problème devient encore plus grand avec le JSlider que j'utilise dans d'autres programmes. Le curseur reste toujours à la position initiale, même si cela fonctionne dans un certain sens: sa valeur change. J'utilise Eclipse, version 2011 et la dernière bibliothèque JRE (v.7u6 http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1637588.html). Je n'ai pas trouvé suffisamment d'informations sur Internet. Quel est le problème? Merci de votre aide!! Le paquet acm peut être téléchargé ici http://jtf.acm.org/acm.jar
S'il vous plaît fournir le code ** compilable ** (SSCCE) .. –
I'have ok ajouté le code source GStar. vous pouvez l'exécuter. @HarmeetSingh – mgus