2017-05-10 3 views
0

저는 Java에 익숙하지 않지만 사용자가 그리거나, 펜의 색상과 크기를 변경하거나, 그리기 영역을 지울 수있는 간단한 페인트 프로그램을 만들었습니다.페인트 프로그램의 펜 투명도에 문제가 있음

사용자가 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는

는 색 ColorSpace로 색의 색상 및 알파 컴포넌트를 포함하는 float 배열을 리턴 ([] compArray 부유). compArray가 null의 경우, 관련 지을 수 있었던 ColorSpace의 성분 수에 1을 더한 길이를 가지는 배열이 반환 값으로서 작성됩니다. 그렇지 않은 경우 compArray는 적어도이 길이를 가져야하며 구성 요소로 채워지고 반환됩니다.

매개 변수 : compArray -이 메소드가 ColorSpace로이 Color의 색성분과 알파 성분을 설정해 및

반환 반환 배열 : float 배열 색상 및 알파 성분을.

+0

고마워요! 나는 그것을 작동하게했다! :) – Jonny1998

+0

@ Jonny1998 니스! 대답이 도움이 되었다면, 그것을 허용으로 표시 할 수 있습니다 :) – RaceYouAnytime