Neden

2016-03-23 24 views
1

öğesini tıklattığım çizimi çizmeyeceğim. Bu yüzden, kullanıcının tıkladığı bir çember çizmeye çalışıyorum. Bu, aşağıdaki çubuk tarafından yeniden boyutlandırılabilir. Her şey, çemberin istediğim yere çizmeyeceği dışında çalışır. Baska öneri? İşte Neden

İşte benim Paneli

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 

     } 


    } 

} 

olan TestClass bir pencere oluşturur ve çağrı diğer önemli sınıftır;

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(); 
     } 
} 
+1

Bu bir çok kod. Ne denedin, neyin işe yarayıp yaramadığı? –

+2

sorunu yaratıyorsunuz 'TestClass değerleri = new TestClass();' boya metod.very içinde testclass nesnesi.çok kötü.çıkarın.çıkıyorsunuz yeni oluşturduğunuz nesneden değerler aldığınızdan beri 0 olsun 50 + 0 her zaman 0 nereye tıkladığınız önemli değil –

+1

@FastSnail ile katılıyorum; Her tıklamada "TestClass" ı yeniden tahsis ediyorsunuz! Bu nedenle üye değişkenleri her zaman yeniden başlatılır. –

cevap

1

Hey Guys Çalışırken bulmanın bir yolunu buldum. Tam burada

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 static int x1=0,y1=0; 
    public TestClass(){ 
     super("The Title"); 
     myPanel = new Panel(); 
     myPanel.setBackground(Color.YELLOW); 
     //Allows you to re-size the drawn circle 
     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()); 
        } 
       } 
      ); 
     //Create a way to handle user mouse events 
     HandlerClass handler = new HandlerClass(); 
     myPanel.addMouseListener(handler); 
     add(slide, BorderLayout.SOUTH); 
     add(myPanel, BorderLayout.CENTER); 


    } 



    private class HandlerClass implements MouseListener{ 

     @Override 
     public void mouseClicked(MouseEvent event) { 
      // TODO Auto-generated method stub 

bu yöntem x ve bir tıklama y koordinatlarını alır ve setPosition yöntemi vardır MainClass nesne myPanel gönderir, koduyla yeni budur; önce sınıf gösterisi.

myPanel.setPosition(event.getX(),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 

     } 


    } 

} 

Burada aslında ana sınıfı ... ithalat java.awt olmasın da, bu poorley adlı MainClass sınıftır. ; import javax.swing.; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;

public class Panel extends JPanel{ 
     private int x1,y1; 
      private int d = 10; 

     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 

      g.setColor(Color.CYAN); 
      g.fillOval(x1, y1, d, d); 
     } 

     public void checkDiameter(int newD) 
      { 
      //New format for if statements 
      d = (newD >= 0 ? newD //if 
        : 10//else 
        ); 

      repaint(); 
     } 
     public void setPosition(int newX, int newY) { 
      this.x1 = newX; 
      this.y1 = newY; 
      repaint(); 
     } 

     public Dimension getPreferredSize(){ 
      return new Dimension(200,200); 
     } 
     public Dimension getMinimumSize(){ 
      return getPreferredSize(); 
     } 
}