Je suis vraiment frustré parce que l'interface graphique affiche mais pas JSlider! Ok, donc l'interface graphique est censée afficher un cercle, JTextfield (qui se met à jour lorsque le curseur est déplacé). Le champ de texte est censé afficher le rayon, le diamètre, etc. et le mettre à jour automatiquement lorsque le curseur est déplacé. Le cercle est également supposé augmenter en taille ou diminuer une fois que le curseur est déplacé. Voici mon code. Pas d'erreurs, fonctionne bien, et compile. C'est probablement mes coordonnées qui sont éteintes.Pourquoi mon JSlider n'apparaît-il pas dans mon interface graphique Java?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import javafx.stage.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Circle1 extends JFrame
{
private final CircleCanvas theCanvas;
private final JTextArea display;
public Circle1()
{
super("Circle1");
theCanvas = new CircleCanvas();
display = new JTextArea(4, 30);
display.setText("The Radius: " + theCanvas.getRadius() + "\nThe Diameter: " + theCanvas.getDiameter() + "\nThe Area: " + theCanvas.getArea() +
"\nThe Circumference: " + theCanvas.getCircumference());
getContentPane().add(theCanvas, BorderLayout.CENTER);
getContentPane().add(display, BorderLayout.SOUTH);
setSize(200, 200);
setVisible(true);
}
public static void main(String args[])
{
Circle1 app = new Circle1();
app.addWindowListener(
new WindowAdapter()
{
public void WindowClosing(WindowEvent e)
{
}
}
);
}
void setDiameter(int value) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
class CircleCanvas extends JPanel
{
private final int radius;
public CircleCanvas()
{
radius = (int)(1 + Math.random() * 100);
setSize (100, 100);
}
@Override
public void paintComponent(Graphics g)
{ g.drawOval(0, 0, radius, radius); }
public int getDiameter()
{ return (2 * radius); }
public int getCircumference()
{ return (int)(2 * Math.PI * radius); }
public int getArea()
{ return (int)(radius * radius * Math.PI); }
public int getRadius()
{ return radius; }
}
class SliderFrame extends JFrame
{
private JSlider diameterJSlider;
private Circle1 myPanel;
public SliderFrame()
{
super("HW2");
myPanel = new Circle1();
diameterJSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 300, 10);
diameterJSlider.setMajorTickSpacing(10);
diameterJSlider.setPaintTicks(true);
diameterJSlider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
myPanel.setDiameter(diameterJSlider.getValue());
}
}
);
add(diameterJSlider, BorderLayout.NORTH);
add(myPanel, BorderLayout.CENTER);
}
}
autant que je peux dire, 'SliderFrame' est jamais utilisé dans votre code – MadProgrammer
Vous devez également appellerez' super.paintComponent' avant d'effectuer une peinture personnalisée , sinon cela va générer des artefacts de peinture méchant et aléatoire – MadProgrammer
J'utilise le 'diameterJSlider' qui a bien fonctionné quand je l'ai utilisé sur une interface graphique séparée et il a affiché le curseur. – SkyWard