2016-09-21 12 views
0

描画アプリケーションを作成したいと思います。それはあなたが描画したい色を選択することができます。しかし、配列に選択した色を保存するのに問題があります。出力画面を最大化すると、描画されたすべての線が最後に選択された色に変わります。誰かが私を助けてください。ここJavaでarrrayを使用して色を格納および取得します

package trivialsketcher; 

import java.awt.*; 
import java.awt.event.*; 
import java.util.ArrayList; 
import javax.swing.*; 


public class select extends JFrame{ 
private ArrayList<ArrayList<Point>> Strokes = new ArrayList<>(); 
private ArrayList<Color> color = new ArrayList<Color>(); 
private JButton b; 
private Color rangi = (Color.WHITE); 
private JPanel panel; 
public select() { 
    super ("Color Selection"); 
    panel = new JPanel(); 
    panel.setBackground(Color.WHITE); 
    b= new JButton ("Choose Colour"); 
    b.addActionListener(
    new ActionListener(){   
     public void actionPerformed (ActionEvent event) 
     {     
      //rangi = 
      rangi = (JColorChooser.showDialog(null, "Pick your colour", rangi)); 
      color.add(rangi); 
      Graphics g = getGraphics(); 
      if (rangi == null) 
       rangi=(Color.WHITE); 

     }      
    } 
    ); 
    addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent e) { 
       ArrayList<Point> lastPoint = new ArrayList(); 
      lastPoint.add(new Point(e.getX(), e.getY())); 
      Strokes.add(lastPoint); 
     } 
    }); 
    addMouseMotionListener(new MouseMotionAdapter() { 
     public void mouseDragged(MouseEvent e) { 
      Graphics g = getGraphics(); 
      int last = Strokes.size(); 
      int lastp = Strokes.get(last-1).size(); 
      Strokes.get(last-1).add(new Point(e.getX(), e.getY())); 
      g.setColor(rangi); 
      g.drawLine(Strokes.get(last-1).get(lastp - 1).x, Strokes.get(last-1).get(lastp -1).y,e.getX(), e.getY());    
      g.dispose(); 

     } 
    }); 
    add(panel, BorderLayout.CENTER); 
    add(b, BorderLayout.SOUTH); 
    setSize(600, 600); 
    setVisible(true); 
} 
@Override 
public void paint(Graphics g){ 
    super.paint(g); 
    g.setColor(rangi); 
    for (int y = 0; y < Strokes.size(); y++) { 
    int i = 0; 
    for (int j = 1; j < Strokes.get(y).size(); j++) { 

      g.drawLine(Strokes.get(y).get(i).x, Strokes.get(y).get(i).y, 
        Strokes.get(y).get(j).x, Strokes.get(y).get(j).y); 
      i++; 
    } 
} 
} 

public static void main(String [] args) 
{ 
    select s = new select(); 
    s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

}

+0

をリサイズ動作するコードです。 – VGR

+0

@VGRカラークラスまたはランギ変数を意味しますか? –

+0

どちらもありません。私は 'private ArrayList color = new ArrayList ();'を意味します。 – VGR

答えて

0

後おそらく、あなたは `paint`方法であなたの` color`リストを利用する必要があります

public class Select extends JFrame{ 
private ArrayList<ArrayList<Point>> Strokes = new ArrayList<>(); 
private ArrayList<Color> color = new ArrayList<Color>(); 
private JButton b; 
private Color rangi = (Color.WHITE); 
private JPanel panel; 
public Select() { 
    super ("Color Selection"); 
    panel = new JPanel(); 
    panel.setBackground(Color.WHITE); 
    b= new JButton ("Choose Colour"); 
    b.addActionListener(
    new ActionListener(){   
     public void actionPerformed (ActionEvent event) 
     {     
      //rangi = 
      rangi = (JColorChooser.showDialog(null, "Pick your colour", rangi)); 
      Graphics g = getGraphics(); 
      if (rangi == null) 
       rangi=(Color.WHITE); 

     }      
    } 
    ); 
    addMouseListener(new MouseAdapter() { 
     public void mousePressed(MouseEvent e) { 
       ArrayList<Point> lastPoint = new ArrayList(); 
      lastPoint.add(new Point(e.getX(), e.getY())); 
      Strokes.add(lastPoint); 
      color.add(rangi); 

     } 
    }); 
    addMouseMotionListener(new MouseMotionAdapter() { 
     public void mouseDragged(MouseEvent e) { 
      Graphics g = getGraphics(); 
      int last = Strokes.size(); 
      int lastp = Strokes.get(last-1).size(); 
      Strokes.get(last-1).add(new Point(e.getX(), e.getY())); 
      g.setColor(rangi); 

      g.drawLine(Strokes.get(last-1).get(lastp - 1).x, Strokes.get(last-1).get(lastp -1).y,e.getX(), e.getY());    
      g.dispose(); 

     } 
    }); 
    add(panel, BorderLayout.CENTER); 
    add(b, BorderLayout.SOUTH); 
    setSize(600, 600); 
    setVisible(true); 
} 
@Override 
public void paint(Graphics g){ 
    super.paint(g); 

    for (int y = 0; y < Strokes.size(); y++) { 
    int i = 0; 
    g.setColor(color.get(y)); 
    for (int j = 1; j < Strokes.get(y).size(); j++) { 

      g.drawLine(Strokes.get(y).get(i).x, Strokes.get(y).get(i).y, 
        Strokes.get(y).get(j).x, Strokes.get(y).get(j).y); 
      i++; 
    } 
} 
} 

public static void main(String [] args) 
{ 
    Select s = new Select(); 
    s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 
+0

ありがとうございます。それは完全に動作します:) –

+0

何が変更されたのか、なぜ変更されたのか説明した方が良いでしょう。わずかな変更だけで新しいソースファイルをダンプするだけで、元のポスターには解決策が提供されますが、他の人にはあまり役に立ちません。また、オリジナルのポスターが今後この問題を回避するのに役立つことはありません。 – VGR

+0

@VGR、あなたが正しいです、私はあなたのコメント –

関連する問題