Selecionar - Seleção multipla - Quadrado de seleção

15 respostas
tabocu

Olá pessoal,

existe algo em java que sirva pra criar uma seleção?

15 Respostas

tabocu

Alguem…
Me ajudem…
Algum link, alguma dica
Pelo menos me digam se existe pronto

S

link : http://www.geeksetconline.com/pdshoppro/images/superswinggolfwii.jpg

x111

Você quer selecionar os arquivos na tela, ou quer tirar um print screen de parte da tela? Não entendi!

tabocu

Tenho vários componentes espalhados em um JPanel, quero selecionalos. Bom na verdade eu to fazendo uma gambiarra: eu capituro um ponto pressed do mous e um released

Com dois pontos consigo definir um quadrado e usando contains de java2D consigo determinar de os objetos tao na area de seleção

x111

Olha eu varia a mesma coisa, não acho que seja gambia não!

tabocu

Tem muito bug chato pra tratar e o desempenho grafico nao ta muito bom, imagino que se ja existisse algo pronto seria mais otimizado.

Agora me diga
existe algo que eu possa desenhar um quadrado passando como parametro dois pontos?

x111

Olha, se fosse no Delphi teria, mas no Java eu não conheço!

tabocu

E aew!
Olha minha solução para desenhar um quadrado a partir de dois pontos:

Com isso eu faço meu selecionar

Se alguem tem alguma critica/ideia fala ai!

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class JKSSelect extends JComponent{
	public JKSSelect(){
		super();
		this.setBorder(BorderFactory.createTitledBorder(""));
	}
	public void makeSquare(Point a, Point b){
		Point aux;
		if(a == null || b == null){
			a = new Point(0,0);
			b = new Point(0,0);
		}
		if(a.x == 0 && a.y == 0 && b.x == 0 && b.y == 0){
			this.setLocation(0,0);
            this.setSize(0,0);
		}
		if((a.x>=b.x && a.y>b.y) || (a.x<b.x && a.y>=b.y)){
			aux = a;
			a = b;
			b = aux;
		}
		if(a.x<=b.x && a.y<b.y){
			this.setLocation((int) (a.x),(int) (a.y));
            this.setSize((int) (b.x-a.x),(int) (b.y-a.y));
		}else if(a.x>b.x && a.y<=b.y){
			this.setLocation((int) (b.x),(int) (a.y));
            this.setSize((int) (a.x-b.x),(int) (b.y-a.y));
		}	
	}
}
igortdt

Cara tô precisando selecionar um conjunto de pixel que formam uma reta, ou seja eu tenho o algoritimo de Bresenham que desenha alguns pixel em um painel formando uma reta, com esse sua classe é possivel seleionar esse conjunto de pixel.

OBS: eu tenho esse conjuntos de pontos em um estrutura de dados.

tabocu:
E aew! Olha minha solução para desenhar um quadrado a partir de dois pontos:

Com isso eu faço meu selecionar

Se alguem tem alguma critica/ideia fala ai!

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class JKSSelect extends JComponent{
	public JKSSelect(){
		super();
		this.setBorder(BorderFactory.createTitledBorder(""));
	}
	public void makeSquare(Point a, Point b){
		Point aux;
		if(a == null || b == null){
			a = new Point(0,0);
			b = new Point(0,0);
		}
		if(a.x == 0 && a.y == 0 && b.x == 0 && b.y == 0){
			this.setLocation(0,0);
            this.setSize(0,0);
		}
		if((a.x>=b.x && a.y>b.y) || (a.x<b.x && a.y>=b.y)){
			aux = a;
			a = b;
			b = aux;
		}
		if(a.x<=b.x && a.y<b.y){
			this.setLocation((int) (a.x),(int) (a.y));
            this.setSize((int) (b.x-a.x),(int) (b.y-a.y));
		}else if(a.x>b.x && a.y<=b.y){
			this.setLocation((int) (b.x),(int) (a.y));
            this.setSize((int) (a.x-b.x),(int) (b.y-a.y));
		}	
	}
}
tabocu

Algum motivo especial para voce utilizar um algoritimo a parte pra desenhar uma reta e nao utilizar o próprio da AWT?

igortdt

Sim é um trabalho de computacao grafica, e tenho que usar esse algoritimo.

Estou querendo fazer um plus nessa trabalho, depois que desenhar os objetos pedido, quero selecionar alguns deles para poder fazer alguma determinada transformação tais como colocar escala, rotacionar etc.

tabocu

Essa classe trabalha com seleção de objetos filhos de JComponente.

Mas pro seu caso funcionária assim:
O quadrado representa visualmente um intervalo. Cabe a voce verificar se os pixels estão dentro do intervalo ou nao.

(x1,y1) (x2,y1)


--------------
--------------
__________

(x1,y2) (x2,y2)

se o pixel: x1<px<x2 && y1<py<y2
ele está selecionado

Pode ser mais eficiente do que isso se voce tiver um mapeamento bidimensionalmente ordenado para esses pixelsh

igortdt

O problema que esta acontecendo, é pq não estou conseguindo usar a sua classe para selecionar tais pixel, vc não tem um exemplo que possa ajudar nao?

tabocu:
Essa classe trabalha com seleção de objetos filhos de JComponente.

Mas pro seu caso funcionária assim:
O quadrado representa visualmente um intervalo. Cabe a voce verificar se os pixels estão dentro do intervalo ou nao.

(x1,y1) (x2,y1)


--------------
--------------
__________

(x1,y2) (x2,y2)

se o pixel: x1<px<x2 && y1<py<y2
ele está selecionado

Pode ser mais eficiente do que isso se voce tiver um mapeamento bidimensionalmente ordenado para esses pixelsh

tabocu

Voce deve implementar alguns listeners pra criar esse quadrado no seu painel de forma a capturar o ponto inicial do click e o ponto final. Apos o quadrado formado voce pode utilizar o metodo contains para verificar se cada ponto pertence ou nao ao quadrado. Note que o makeSquare recebe dois pontos. o ponto inicial e o ponto final da seleção.

ViniGodoy

Use a classe Rectangle2D. Ela já tem implementado os testes de colisão, inserseção e o método contains.

Criado 13 de janeiro de 2011
Ultima resposta 27 de ago. de 2011
Respostas 15
Participantes 5