2017-05-10 7 views
0

私は比較的新しいですが、ペンの色やサイズを変更したり、描画領域をクリアするための簡単なペイントプログラムを作成しました。ペイントプログラムのペンの透明度に問題があります

ユーザはJColorChooserオブジェクト 'c'から色を選択し、これはc.getColor()を介して 'selected' Color変数に渡されます。私は、選択された色の透明度を変更することができるようにしたいが、setColor(r、g、b、a)メソッドを使用できるようにColorからRGBに変換する方法があるかどうかはわかりません。私のコードは以下の通りです。私は本当に助けていただきありがとうございます!

Color selected; 

public class ColorTool extends JPanel { 
    public ColorTool() { 
     super(new BorderLayout()); 
     b = new JLabel("Pen Color", JLabel.CENTER); 
     b.setForeground(Color.black); 

     c = new JColorChooser(b.getForeground()); 
     c.getSelectionModel().addChangeListener(new ColorListener()); 

     add(c, BorderLayout.PAGE_END); 
    } 
} 

public DrawPanel() { 
     setDoubleBuffered(false); 
     addMouseListener(new MouseAdapter() { 
       public void mousePressed(MouseEvent e) { 

        for (int i = 0; i <= 100; i++) { 
         if (PS == i) { 
          oldX = (int)(e.getX() - Math.ceil(PS/2)); 
          oldY = (int)(e.getY() - Math.ceil(PS/2)); 
          if (graphics != null) { 
           graphics.setColor(selected); 
           graphics.fillOval(oldX, oldY, PS, PS); 
          } 
          repaint(); 
          oldX = e.getX(); 
          oldY = e.getY(); 
         } 
        } 
       } 
      }); 

     addMouseMotionListener(new MouseMotionAdapter() { 
       public void mouseDragged(MouseEvent e) { 
        BasicStroke size = new BasicStroke(PS, 
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 
        currentX = e.getX(); 
        currentY = e.getY(); 
        if (graphics != null) { 
         graphics.setColor(selected); 
         graphics.setStroke(size); 
         graphics.drawLine(oldX, oldY, currentX, currentY); 
        } 
        repaint(); 
        oldX = currentX; 
        oldY = currentY; 
       } 
      }); 

    } 

public class ColorListener implements ChangeListener { 
    public void stateChanged(ChangeEvent e) { 
     selected = c.getColor(); 
    } 
} 

答えて

0

あなたは色のインスタンスでメソッドにのgetComponentsを呼び出すことによって、それをアクセスすることができます。

From the documentation:

公共フロート[]のgetComponents(フロート[] compArray)

カラーのColorSpaceに、色の色成分およびアルファ成分を格納するfloat配列を返し。 compArrayがnullの場合、関連するColorSpaceの要素数に等しい長さの配列が戻り値として作成されます。そうでない場合、compArrayは少なくともこの長さを持ち、コンポーネントで埋められ、返されます。

パラメータ:compArray - この方法は、そのColorSpaceのこのColorの色成分およびアルファ成分で満たし、

戻り返すこと配列:float配列で 色とアルファ成分を。

+0

ありがとうございます!私はそれを働かせた! :) – Jonny1998

+0

@ Jonny1998ニース!答えが助けられたら、それを受け入れられたものとしてマークすることができます:) – RaceYouAnytime

関連する問題