• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Blackie

[Resolvido]Pedido de Informação / Ajuda - Como centrar uma janela no ecrã?

10 mensagens neste tópico

Como fazer para posicionar no ecran, em determinada posição, uma janela (por ex. Jlabel, JFrame) não redimensionavel, que por defeito se posiciona

no canto superior esquerdo?

Obrigado

Blackie

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Java 1.5:

       

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2, getWidth(), getHeight());

Se usares uma vesão anterior ao 1.5, ou se quiseres manter a compatibilidade para versões anteriores, em vez do método setBounds, podes usar o setLocation, se não me engano.

Os métodos getWidth() e getHeight() fazem parte da JFrame, JDialog, etc.

Já agora, um nome mais sugestivo para a dúvida pode ajudar ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Knitter, 

Para já obrigado pela ajuda (resposta), no entanto, depois da tua proposta, acontece que a janela se posiciona no canto inferior direito.

Faltará qualquer "coisa".

Blackie

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum... escrevi o código sem testar, e agora não tenho tempo para o fazer, depois vejo o que está errado, mas assim à primeira vista parece que os dois últimos parâmetros do método setBounds não estão correctos...

Usa este código, que funciona de certeza ;)

     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);

Este código assume que está dentro da frame.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bolas já vi o erro, acho eu... os parêntesis estão mal colocados...

setBounds((screenSize.width - getWidth() / 2), (screenSize.height - getHeight() / 2), getWidth(), getHeight());

A posição é dada pelo tamanho do ecrã menos metade do tamanho da frame. Espero que assim se perceba.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Knitter

Continua a não estar OK.

A tua penúltima proposta não mostra a janela. A última continua a colocar no canto inferior direito.

Já agora, no código indico uma outra dúvida que se for possível agradeço a ajuda.

Deixo entretanto o código, porque posso estar a fazer qualquer coisa menos bem.

Obrigado


package janelacomimagem;

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

public class ImagemInicial extends JFrame{
  public ImagemInicial(){
    super("Janela Com Imagem e Texto");

    Container ecran = getContentPane();
    
    FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
    ecran.setLayout(layout); 
    
  // ----------- Criar instancia icone ---------------------------------------
    ImageIcon icone = new ImageIcon("XXXXXX.gif"); // O nome do ficheiro da imagem é aqui ???
    // onde e como colocar a indicação do caminho para o nome do ficheiro ??
    JLabel imagem1 = new JLabel(icone);
  
    ecran.add(imagem1); 
    
  // ----------- Assim posiciona inferior direita ----------------------------------------  
    
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);
    
    
  // ---------- Assim posiciona inferior direita ------------------------------------------  
    
//  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//  setBounds((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2, getWidth(), getHeight());
  
        
        
// ----------- Assim não mostra a janela -------------------------------------------------  
  
// setBounds((screenSize.width - getWidth() / 2), (screenSize.height - getHeight() / 2), getWidth(), getHeight());
// ---------------------------------------------------------------------------------------  
  
    setResizable(false);
    setSize(550, 275);
    setVisible(true);  
  }
  

   public static void main(String args[]){
    ImagemInicial app = new ImagemInicial();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cometi dois erros, um foi pensar que o erro era meu e tentar corrigir uma coisa que não estava errada, ;), outro foi não te ter dito que para redimencionares uma janela tens de o fazer depois de todos os componentes estarem dispostos e imediatamente antes ou imediatamente depois de a tornares visível.

Este código funciona, garantidamente, testei, com qualquer uma das opções que te dei, embora tenha deixado apenas uma descomentada e te aconselhe a usar essa.

/*
* JanelaInicial.java
*
* Created on 8 de Fevereiro de 2007, 14:40
*
*/

package org.sergiolopes.blackie;

/**
*
* @author Knitter
*/

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

public class ImagemInicial extends JFrame{
    
  public ImagemInicial(){
    super("Janela Com Imagem e Texto");
    Container ecran = getContentPane();
   
    FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
    ecran.setLayout(layout);
   
  // ----------- Criar instancia icone ---------------------------------------
    ImageIcon icone = new ImageIcon("XXXXXX.gif"); // O nome do ficheiro da imagem é aqui Huh?
    // onde e como colocar a indicação do caminho para o nome do ficheiro ??
    JLabel imagem1 = new JLabel(icone);
    
    /**
     * Para colocares uma imagem numa label tens de criar um ImageIcon para o fazeres
     * basta usares o construtor do ImageIcon e indicares o caminho para o ficheiro.
     * Se nao indicares um caminho absoluto a aplicacao vai procurar o ficheiro na pasta onde esta 
     * a correr. 
     *
     */
    /* Primeiro limpamos o texto */
    imagem1.setText("");
    /* Agora vamos buscar uma imagem dentro da pasta imagens, partindo da raiz da nossa aplicacao
       Repara nas barras, estas sao as barras que devem ser usadas, independentemente do tipo 
       de sistema operativo, o contrutor trata de transformar a string num URL, logo 
       as barras funcionaram sempre.
     */
    imagem1.setIcon(new ImageIcon("imagens/nomedaimagem.extensao"));

    ecran.add(imagem1);
   
    setResizable(false);
    setSize(550, 275);
    
    /**
     * Este codigo tem de estar no fim da frame estar completa, senao nao tens garantia
     * do que estas a dimensionar. Repara que no codigo que tinhas, estava a centrar a janela 
     * baseando a formula num tamanho, mas logo depois mudavas o tamanho da janela
     * Deixa este codigo antes de mostrares a frame ou coloca-o num metodo e invoca esse 
     * metodo antes de chamares o metodo "setVisible"
     *
     */
       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);
    
       /*Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
       setBounds((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2, getWidth(), getHeight());*/
    setVisible(true); 
  }


   public static void main(String args[]){
    ImagemInicial app = new ImagemInicial();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}


Como a pergunta foi feita no código, está respondida no código :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Knitter

Relativamente ao centrar a Janela está agora tudo OK (com qualquer uma das duas opções propostas por ti).

Em relação a apresentar a imagem é que ainda não consegui resolver, ainda que não consegui perceber porquê. Mas vou tentando.

Obrigado

Um ab.

Blackie

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem para que o tópico não tenha informação que não esteja relacionada com o título, cria um novo tópico com essa dúvida.

Nele explica que erros estás a obter, como estás a tentar carregar a imagem e onde está a imagem no disco.

Questão resolvida, tópico bloqueado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Convidado
Este tópico está fechado a novas respostas.