Fala galera, então, to desenvolvendo o meu programa e tal, mas uma coisa que eu ainda não sonsegui fazer foi deixar o Jpanel( a área de desenho do programa) branco. Eu não sei no windows, mas aqui no linux mint ele acaba pegando a cor do tema, ficando meio acizentado. Pra vocês terem uma idéia, olha como é que fica quando eu passo a ferramenta borracha no painel:
[URL=http://www.imagebanana.com/view/6c87k5kv/NovaImagem0UniversoPessoalVerso0.3al.png]
[/URL]
Conseguem ver um branco rabiscado na área de desenho? Já tentei usar Setbackground, mas foi o mesmo que nada. Alguém tem outra sugestão? segue o código:
/**
* Armazena o objeto que representa a area desenho
*/
private JPanel jpArea = new JPanel() {
/**
* Armazena o objeto responsável pelo desenho no programa principal
*/
private Desenhista operador = dsDesenhista;
@Override
protected void paintComponent(Graphics g) {
g = g.create();
super.paintComponents(g);
operador.paintComponent(g);
g.dispose();
}
};
//(...) Outras alterações na área de desenho no método abaixo:
/**
* Executa as operações de configuração da área de desenho
*/
public void configuraAmbiente() {
this.dsDesenhista.setPainel(jpArea);
this.jpBarras.setLayout(new BorderLayout());
this.criaBarraBasica();
this.jfJanela.add(this.jpBarras);
this.jpArea.setMaximumSize(dmTamanho);
this.jpArea.setPreferredSize(dmTamanho);
this.jpArea.setOpaque(true);
this.jpArea.setBackground(Color.white);
this.jpArea.addMouseListener(this.dsDesenhista);
this.jpArea.addMouseMotionListener(this.dsDesenhista);
this.jpArea.addMouseWheelListener(this.dsDesenhista);
this.jpArea.setBorder(BorderFactory.createLineBorder(Color.black));
this.jpBarras.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30));
JPanel mesa = new JPanel();
mesa.setLayout(new BoxLayout(mesa, BoxLayout.X_AXIS));
mesa.add(Box.createHorizontalGlue());
mesa.add(this.jpArea);
mesa.add(Box.createHorizontalGlue());
mesa.setBackground(Color.gray);
mesa.setPreferredSize(dmTamanho);
this.jspBase.setViewportView(mesa);
this.jspBase.getViewport();
this.jpArea.addPropertyChangeListener( new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
}
});
this.jfJanela.add(this.jspBase);
}
Segue aos métodos da classe desenhista:
/**
* Desenha todos os compenentes presentes na lista de desenho no objeto Graphics indicado
* @param g o contexto gráfico usado para o desenho
*/
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
verificaImagem();
g.drawImage(this.imVisualizacao, 0, 0, this.getPainel().getWidth(), this.getPainel().getHeight(), null);
desenhaRestantes(g);
}
/** Verifica se a imagem é compatível com o conteúdo das listas de desenhos e a modifica, caso não seja
*/
private void verificaImagem() {
if(this.imVisualizacao==null || (this.imVisualizacao.getWidth(null) != this.imagemAtual.getTamanho().getWidth() ||this.imVisualizacao.getHeight(null) != this.imagemAtual.getTamanho().getHeight())){
this.imVisualizacao = this.painel.createImage((int)this.imagemAtual.getTamanho().getWidth(), (int) this.imagemAtual.getTamanho().getHeight());
if(!this.lsDesenhosImpressos.isEmpty()){
this.imprimeLista(this.lsDesenhosImpressos);
}
}
}
/**
* Imprime os desenhos que ainda estão na lista dos pendentes
* @param grafico o contexto gráfico onde serão impressos
*/
void desenhaRestantes(Graphics grafico) {
//Se já tá tudo desenhado, retorna
if(this.lsDesenhosPendentes.isEmpty())
return;
desenhaLista(this.lsDesenhosPendentes, grafico,this.imagemAtual.getZoom());
}
/**Desenha a lista indicada no contexto gráfico indicado utilizando o fator de zoom para posicionamento dos objetos
* @param lista a lista de objetos Desenho a ser impressa no contexto
* @param grafico o contexto gráfico aonde serão impressos os desenhos
* @param zoom o fator de zoom a ser aplicado quando do desenho na imagem
*/
private void desenhaLista(List<Desenho> lista, Graphics grafico, double zoom) {
((Graphics2D)grafico).scale(zoom, zoom);
for(Desenho desenho : lista){
grafico.setColor(desenho.getCor());
((Graphics2D)grafico).setStroke(new BasicStroke(desenho.getEspessuraLinha(), BasicStroke.CAP_ROUND ,BasicStroke.JOIN_MITER));
int origemX, origemY;
origemX = Math.min(desenho.getOrigemX(), desenho.getFimX());
origemY = Math.min(desenho.getOrigemY(), desenho.getFimY());
if(desenho.estaPronto())
switch(desenho.getTipo()){
case RETA:
grafico.drawLine(desenho.getOrigemX(), desenho.getOrigemY(), desenho.getFimX(), desenho.getFimY());
break;
case RETANGULO:
if(desenho.estaPreenchida())
grafico.fillRect( (desenho.eCentrado()? desenho.getOrigemX() - desenho.getLargura(): origemX), (desenho.eCentrado()? desenho.getOrigemY() - desenho.getAltura(): origemY), desenho.getLargura()*(desenho.eCentrado()? 2: 1), desenho.getAltura()*(desenho.eCentrado()? 2: 1));
if(desenho.getEspessuraLinha() > 0){
grafico.setColor(((Retangulo)desenho).getCorBorda());
grafico.drawRect( (desenho.eCentrado()? desenho.getOrigemX() - desenho.getLargura(): origemX), (desenho.eCentrado()? desenho.getOrigemY() - desenho.getAltura(): origemY), desenho.getLargura()*(desenho.eCentrado()? 2: 1), desenho.getAltura()*(desenho.eCentrado()? 2: 1));
}
break;
case CIRCULO:
if(desenho.estaPreenchida())
grafico.fillOval( (desenho.eCentrado()? desenho.getOrigemX() -desenho.getLargura(): origemX), (desenho.eCentrado()? desenho.getOrigemY() -desenho.getAltura(): origemY), desenho.getLargura()*(desenho.eCentrado()? 2: 1), desenho.getAltura()*(desenho.eCentrado()? 2: 1));
if(desenho.getEspessuraLinha() > 0){
grafico.setColor(((Elipse)desenho).getCorBorda());
grafico.drawOval( (desenho.eCentrado()? desenho.getOrigemX() - desenho.getLargura(): origemX), (desenho.eCentrado()? desenho.getOrigemY() - desenho.getAltura(): origemY), desenho.getLargura()*(desenho.eCentrado()? 2: 1), desenho.getAltura()*(desenho.eCentrado()? 2: 1));
}
break;
case LINHA:
((Graphics2D)grafico).draw(((Linha)desenho).geraLinha());
break;
case POLIGONO:
for (Line2D linhaPreenchimento : (((Poligono)desenho).getLinhas())) {
((Graphics2D)grafico).draw(linhaPreenchimento);
}
break;
case IMAGEM:
grafico.drawImage(((Imagem) desenho).getImagem(), origemX, origemY, null);
}
}
}