2017-05-10 1 views
0

Ich bin relativ neu in Java, aber ich habe ein einfaches Malprogramm erstellt, mit dem der Benutzer zeichnen, die Farbe und Größe des Stiftes ändern und den Zeichenbereich löschen kann.Probleme mit der Stifttransparenz im Malprogramm

Der Benutzer wählt eine Farbe aus dem JColorChooser-Objekt 'c' aus, und diese wird über c.getColor() an die Color-Variable 'selected' übergeben. Ich möchte in der Lage sein, die Transparenz der ausgewählten Farbe zu ändern, aber ich weiß nicht, ob es eine Möglichkeit gibt, von Farbe in RGB zu konvertieren, so dass ich die Methode setColor (r, g, b, a) verwenden kann. Mein Code ist unten. Ich schätze jede Hilfe!

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

Antwort

0

können Sie das Zugriff durch den Aufruf der Methode getComponents auf der Instanz von Farbe.

From the documentation:

public float [] getComponents (float [] compArray)

Gibt eine Schwimmeranordnung, die Farb- und Alphakomponenten der Farbe, in den Farb der Farbe enthält. Wenn compArray den Wert null hat, wird für den Rückgabewert ein Array mit der Länge erstellt, die der Anzahl der Komponenten im zugeordneten ColorSpace plus eins entspricht. Andernfalls muss compArray mindestens diese Länge haben und es wird mit den Komponenten ausgefüllt und zurückgegeben.

Parameter: compArray - eine Anordnung, dass dieses Verfahren mit den Farb- und Alpha-Komponenten dieser Farbe in ihrer Color füllt und gibt

Returns: die Farb- und Alpha-Komponenten in einem Schwimmer-Array.

+0

Vielen Dank! Ich habe es funktioniert! :) – Jonny1998

+0

@ Jonny1998 Schön! Wenn die Antwort geholfen hat, kannst du es als akzeptiert markieren :) – RaceYouAnytime