Resolução da tela (Dual Monitor)

11 respostas
S
Ola galera, estou usando Dual monitor no meu PC e preciso pegar a resolução que esta sendo usada nos dois monitores, no meu principal eu consigo pegar, agora o meu secundario nao faço a minima... para pegar no primeiro monitor uso:
Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension dim = tk.getScreenSize();
		
		int l = (int)dim.getHeight();
		int a = (int) dim.getWidth();
		
		System.out.println("" + a + " * " + l);

dei uma olhada na classe GraphicsConfiguration mais nao entendi muita coisa...alguem jah fez algo do tipo?!

OBS, meu objetivo final eh abir o software no monitor 1 e quando clicar nu, botao abrir outra tela no centro do monitor 2 ;]

--editado Consegui pegar os dois dispositivos, agora nao consigo pegar a resoução de cada dispositivo, estou pegando assim:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
	    GraphicsDevice[] devices = ge.getScreenDevices();
Obrigado.

11 Respostas

M

Uma vez que você tem os GraphicsDevice, basta chamar o método getDisplayMode() de cada um. Esse método retorna um DisplayMode que contém informação sobre altura, largura, bit depth e taxa de atualização do dispositivo atual.

S

ai, valeu, eu conegui aqui,
mais o source fikou no trampo, amanha eu posto ai pra mostrar como fikou…valeu!!

S
ta ai, pra quem precisar:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice[] gs = ge.getScreenDevices();

		if(gs.length > 1){
			GraphicsDevice gd = gs[1];
			GraphicsConfiguration[] gc = gd.getConfigurations();
			
			TelaSecundaria tela = new TelaSecundaria(); 
			Rectangle gcBounds = gc[0].getBounds();
			int devWidth = gcBounds.width;
			int devHeight = gcBounds.height;
			
			int telaWidth = tela.getWidth();
			int telaHeight = tela.getHeight();
			
			int posX = (devWidth + (devWidth/2)) - (telaWidth/2);
			int posY = (devHeight/2) - (telaHeight/2);
			
			tela.setLocation(posX, posY);
			tela.setVisible(true);
		}
S

Pessoal, porem agora vejam se isso eh possivel:
coloquei uma imagem na segunda tela, eu gostaria que ele abrisse do mesmo jeito, tanto num resolução grande (1024x728) como numa pequena(800x600), sem distorcer nem nada. É possivel fazer isso!?

M

O que você quer fizer com “sem distorção”? No tamanho original da imagem? Geralmente esse é o comportamento. Como exatamente você quer a imagem e como está seu código para carregar e mostrar a imagem?

E

Sad7:
Pessoal, porem agora vejam se isso eh possivel:
coloquei uma imagem na segunda tela, eu gostaria que ele abrisse do mesmo jeito, tanto num resolução grande (1024x728) como numa pequena(800x600), sem distorcer nem nada. É possivel fazer isso!?

Aprenda a usar LayoutManagers e seja feliz!

S

é o seguinte, quero que a imagem va se adaptando de acordo com o tamanho da minha janela, no Visual Studio por exemplo tem essa função pronta, “Size Mode” > “Zoom”, a imagem vai dando o zoom necessario para se adaptar a tela.

M

é o seguinte, quero que a imagem va se adaptando de acordo com o tamanho da minha janela, no Visual Studio por exemplo tem essa função pronta, “Size Mode” > “Zoom”, a imagem vai dando o zoom necessario para se adaptar a tela.
Adicione um ComponentListener ao seu JFrame e no método componentResized faça o resize da imagem com o método Image.getScaledInstance().

S

é o seguinte, quero que a imagem va se adaptando de acordo com o tamanho da minha janela, no Visual Studio por exemplo tem essa função pronta, “Size Mode” > “Zoom”, a imagem vai dando o zoom necessario para se adaptar a tela.
Adicione um ComponentListener ao seu JFrame e no método componentResized faça o resize da imagem com o método Image.getScaledInstance().

Consegui fazer a parte de redimensionar, porem agora estou com outro erro que ta dando dor de cabeça, quando eu pego a imagem redimensionada num BufferedImage, a imagem aparece no meu JFrame e logo em seguida desaparece, se alguem puder dar uma ajuda =//

estou printando desta maneira na tela:

// redimensiona imagem
        BufferedImage resizeImage = resizeImage(image, getWidth(), getHeight());
	Image img = resizeImage;

        // centraliza imagem na tela
	int x = (getWidth() - resizeImage.getWidth()) / 2;
	int y = (getHeight() - resizeImage.getHeight()) / 2;
        // pinta imagem no componente
	getGraphics().drawImage(img, x, y, this);
M

Isso vai acontecer mesmo que a imagem não seja redimensionada.

Isso porque você desenha a imagem uma vez, mas todas as vezes que o seu programa ou o sistema operacional fizer uma requisição de repaint() sua imagem não será desenhada.

Antes você mostrava a imagem como? Faça algo parecido, porém usando a imagem redimensionada.

PS: se você redimensiona a imagem para o tamanho da tela, não precisa fazer cálculo de posição: basta colocar na posição [0,0].

S

Resolvido,
eu rosolvi colocando uma imagem em um JLabel, dae ela apareceu normalmente.

Obrigado pela ajuda galera.
Abraçoss!

Criado 12 de janeiro de 2010
Ultima resposta 18 de jan. de 2010
Respostas 11
Participantes 3