Java – cor opaca

Eu estou tentando desenhar algumas linhas. Problema é sobre colors. Por exemplo. Eu tenho várias linhas de cor vermelha, e que eu desenho uma linha de cor azul (ou invertida). E às vezes, isso alinha isso é mais, é opaco para aquele último.

Tentei criar novas colors e definir colors com alpha composite 0.7 – para aquelas mais linhas, e uma cor que deixei padrão – opaco (alpha 1.0). No princípio eu desenho mais linhas e do que um último. Mas as linhas “sobrescrevem” essa. Existe alguma solução para corrigir esse problema?

Eu desenhei as linhas no vidro.


editar : esse código é robusto, por isso é difícil publicá-lo, e é uma parte da tese. princípio é de 2 colors, por exemplo Cor basicColor; Cor similarColor;

do que eu tenho método paint e 2 hashmaps como atributos – alguns pontos são armazenados. I iterar sobre este mapa, lembre-se que um ponto e semelhante a ele, todos os outros se conectam com graphics2D.drawLine (x1, y1, x2, y2) e que mudam de cor e pintam a última linha com outra cor. Estou modificando o traço também, para torná-lo mais significativo.

Espero que seja o suficiente …


edit2: eu tenho algum ponto semelhantePointPoint do que um método de pintura robusta e aqui está os charts modificando iterador iterar sobre lista de listas de pontos.

Point similar = null; Iterator secondIterator; graphics.setColor(colorOfSimilar); while (iterator.hasNext()) { Point point = iterator.next(); if (point.equals(similarPoint)) { similar = similarPoint; } else { secondIterator = secondMap.get(point).iterator(); while (secondIterator.hasNext()) { Point secondPoint = secondIterator.next(); graphics2D.drawLine(point.getX(), point.getY(), secondPoint.getX(), secondPoint.getY()); } } } if (similar != null) { secondIterator = secondMap.get(similar); graphics2D.setColor(hooverColor); graphics2D.setStroke(new BasicStroke(2.5f)); while (secondIterator.hasNext()) { Point secondPoint = secondIterator.next(); graphics2D.drawLine(similar.getX(), similar.getY(), secondPoint.getX(), secondPoint.getY()); } graphics2D.setColor(colorOfSimilar); graphics2D.setStroke(new BasicStroke(1.0f)); } 

Eu escrevi no bloco de notas, sinto muito sobre alguns erros (acho que colchetes, etc), mas este é o mecanismo de modificação, em torno de outros methods para iterar e outros, mas não é importante. Problema com acidente vascular cerebral não existe, porque no começo eu fiz isso sem acidente vascular cerebral.

Obrigado por qualquer ideia.

O resultado depende de qual regra de composição é especificada no contexto gráfico usando setComposite() . Este utilitário pode ser útil para entender os vários modos. Também pode ajudá-lo a preparar um sscce que exiba o problema que você descreve.

Adendo: Aqui está um exemplo que mostra como alguém pode usar o modo AlphaComposite.Src para isso.

insira a descrição da imagem aqui

 import javax.swing.*; import java.awt.*; import java.awt.geom.*; /** @see http://stackoverflow.com/questions/7823631 */ public class X extends JPanel { private static final int SIZE = 300; private static final int INSET = 64; private static final AlphaComposite OVER_HALF = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f); private boolean src; public X(boolean src) { this.src = src; this.setBackground(Color.lightGray); } @Override public Dimension getPreferredSize() { return new Dimension(SIZE, SIZE); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Line2D line1 = new Line2D.Double(INSET, INSET, getWidth() - INSET, getHeight() - INSET); Line2D line2 = new Line2D.Double(getWidth() - INSET, INSET, INSET, getHeight() - INSET); g2.setStroke(new BasicStroke(64, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); g2.setComposite(OVER_HALF); g2.setColor(Color.red); g2.draw(line1); if (src) { g2.setComposite(AlphaComposite.Src); } g2.setColor(Color.blue); g2.draw(line2); } public static void main(String[] args) { final JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(1, 0)); frame.add(new X(false)); frame.add(new X(true)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }