2017-10-11 10 views
0

私は初心者からJava Swingです。 マイコードはこれです:私はこれを実行している間public void paintComponent(Graphics g)not working

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 

public class LineDrawing extends JComponent 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 

     int startX = 0; 
     int startY = 0; 
     int endX = 0; 
     int endY = 0; 

     addMouseListener(new MouseListener(){ 
      @Override 
      public void mousePressed(MouseEvent e) 
      { 
       startX = e.getXOnScreen(); 
       startY = e.getYOnScreen(); 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) 
      { 
       endX = e.getXOnScreen(); 
       endY = e.getYOnScreen(); 
       Draw d = new Draw(); 
       d.lineDraw(startX,startY,endX,endY); 
       panel.add(d); 
       frame.add(panel); 
      } 

      @Override 
      public void mouseClicked(MouseEvent e){} 

      @Override 
      public void mouseEntered(MouseEvent e){} 

      @Override 
      public void mouseExited(MouseEvent e){} 
     }); 

     addMouseMotionListener(new MouseMotionListener(){ 
      @Override 
      public void mouseDragged(MouseEvent e) 
      { 
       endX = e.getXOnScreen(); 
       endY = e.getYOnScreen(); 
      } 

      @Override 
      public void mouseMoved(MouseEvent e){} 
     }); 

     frame.setSize(500,400); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public class Draw extends JPanel 
    { 
     public void lineDraw(int x1,int y1,int x2,int y2) 
     { 
      @Override 
      protected void paintComponent(Graphics g) 
      { 
       super.paintComponent(g); 
       g.setColor(Color.black); 
       g.drawLine(x1,y1,x2,y2); 
      } 
     } 
    } 
} 

が、それは私にこのエラーを与える:私はこのコードを強化し、上記のエラーを解決するにはどうすればよい

enter image description here

他のコードも見ましたが、paintComponentに何か問題があります。

私はpaintComponent前に@Overrideを入れたままならば...それは、このエラーを与える:バックスラッシュのよう

1) ';' statement missing. 2) illegal start of expression.

+4

メソッドを別のメソッドの中に宣言することはできません。 – BackSlash

答えて

2

は、既存の内部メソッドを宣言することはできませんコメントしました。あなたはArrayListのような別のデータ構造に、あなたがこのリストを反復処理し、すべてのものをペイントpaintComponentメソッドにラインアレイを追加する必要があり、複数の線を描画するには

public class Draw extends JPanel { 

    private int[] line = new int[4]; 

    public void lineDraw(int x1,int y1,int x2,int y2) { 
     line[0] = x1; 
     line[1] = y1; 
     line[2] = x2; 
     line[3] = y2; 
     repaint(); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.black); 
     g.drawLine(line[0],line[1],line[2],line[3]); 
    } 
} 

はこれを試してみてください。