Also ich versuche einen Kreis zu zeichnen, wo ein Benutzer klickt, der dann von der Leiste unten nach unten skaliert werden kann. Alles funktioniert, außer dass der Kreis nicht zeichnet wo ich es möchte. Irgendwelche Vorschläge?Warum wird kein Kreis gezeichnet, wo ich klicke
Hier ist mein Panel-
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.event.*;
public class TestClass extends JFrame {
private JSlider slide;
private MainClass myPanel;
public int x1=0;
public int y1=0;
public TestClass(){
super("The Title");
myPanel = new MainClass();
myPanel.setBackground(Color.YELLOW);
slide = new JSlider(SwingConstants.HORIZONTAL, 0, 200, 10);
slide.setMajorTickSpacing(10);
slide.setPaintTicks(true);
slide.addChangeListener(
new ChangeListener(){
public void stateChanged(ChangeEvent e){
myPanel.checkDiameter(slide.getValue());
}
}
);
HandlerClass handler = new HandlerClass();
slide.addMouseListener(handler);
add(slide, BorderLayout.SOUTH);
add(myPanel, BorderLayout.CENTER);
}
public int setX1(){
return x1;
}
public int setY1(){
return y1;
}
private class HandlerClass implements MouseListener{
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
x1=event.getX();
y1=event.getY();
repaint();
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}
Hier ist die andere wichtige Klasse, die ein Fenster und rufen Testclass erzeugt;
import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MainClass extends JPanel{
private int d = 10;
public void paintComponent(Graphics g){
super.paintComponent(g);
TestClass values = new TestClass();
g.setColor(Color.CYAN);
g.fillOval(values.setX1()+50, values.setY1(), d, d);
}
public void checkDiameter(int newD)
{
//New format for if statements
d = (newD >= 0 ? newD //if
: 10//else
);
repaint();
}
public Dimension getPreferredSize(){
return new Dimension(200,200);
}
public Dimension getMinimumSize(){
return getPreferredSize();
}
}
Das ist eine Menge Code. Was hast du probiert, was funktioniert und was nicht? –
Problem: Sie erstellen 'TestClass values = new TestClass();' testclass Objekt in paint method.very bad.Sie erstellen viele Objekte.und da Sie Werte von neu erstellten Objekt erhalten erhalten Sie 0 so 50 + 0 ist immer 0 egal wo Sie geklickt haben –
Stimmen Sie mit @FastSnail überein; Sie ordnen die 'TestClass' bei jedem Klick neu zu! Die Member-Variablen werden daher immer neu initialisiert. –