Página Inicial do Fórum > GUI - (Applets, Swing, SWT, etc)

Resolução Dinâmica



Criar novo tópico   Responder tópico


  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    Bem gente, estou desenvolvendo um sistema com Layout Null, porém se a resolução da máquina não estiver igual a da máquina onde foi desenvolvido a visualização da aplicação fica meio prejudicada.

    Existe alguma forma de deixar essa resolução dinâmica para que o sistema se enquadre em qualquer resolução? O NetBeans por exemplo, é escrito em java e se adapta perfeitamente a resuloção da máquina.

    Existe alguma forma de fazer isso sem usar Layouts pq na realidade eles atrapalham mais do que ajudam.


    Grato!




  1. staroski
    Posts:3414


    Comment Arrow

    Publicado em: 15/12/2009 10:13:52

    Script
    Bem gente, estou desenvolvendo um sistema com Layout Null


    Porque layout null?

    Script
    O NetBeans por exemplo, é escrito em java e se adapta perfeitamente a resuloção da máquina.


    E com certeza ele utiliza LayoutManagers

    Script
    Existe alguma forma de fazer isso sem usar Layouts pq na realidade eles atrapalham mais do que ajudam.


    Acredito que você está dizendo isso por não conhecer o comportamento de cada Layout. Já consultou a documentação de cada um deles?

    Para mudar a resolução, dê uma olhada no seguinte tópico:
    http://javafree.uol.com.br/topic-875076-Mudar-a-resoulucao-de-tela-do-usuario.html
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    Bem não consegui encontrar nenhum Layout que me servisse, como estou desenhando com o netbeans e quem ja usou ele, sabe que o melhorzinho é o desenho livre, e mesmo assim ele bagunça tudo tentando te ajudar. Dai pra não perder muito tempo coloquei tudo pra null.

    Com relação a solução postada o que eu queria era fazer o inversso ou seja, fazer com que a aplicação adote a resolução que estiver definida no SO.

    Talvez de pra pegar a resolução do SO como no seu exemplo e aplicar no frame com setSize();

    Poder ser feito assim? Será que funciona?




  1. staroski
    Posts:3414


    Comment Arrow

    Publicado em: 15/12/2009 10:13:52

    Script
    Com relação a solução postada o que eu queria era fazer o inversso ou seja, fazer com que a aplicação adote a resolução que estiver definida no SO.


    O aplicativo sempre utiliza a resolução atual do monitor.

    Script

    Talvez de pra pegar a resolução do SO como no seu exemplo e aplicar no frame com setSize();


    Pelo que entendi na verdade você não quer mudar a resolução, você quer mudar o tamanho da janela do seu aplicativo.
    Acontece que como seu layout é null, os componentes vão ficar todos no lugar que estão, então se você aumentar a janela, seu aplicativo vai ficar com um monte de espaço vazio...

    A menos que você queira fazer o contrário:
    Aplicar ao monitor uma resolução de acordo com o tamanho da sua janela.
    Aí basta você percorrer as configurações de resolução válidas e setar aquela que fica mais próxima do tamanho da sua janela.

    Coloca um print-screen da sua janela, posso te dar umas dicas de que layouts aplicar nela.
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    Blz, staroski valeu mesmo, vai ser de grande ajuda, realmente não tenho muita habilidades com Forms gráficos pois como todos já sabem antes de java eu escrevia em clipper, ou seja, tudo modo texto, estático,...

    de clipper pra java
    da água para o vinho em

    ok, aqui vai algumas screes. Apartir dessas já dar pra eu ter uma idéias pras outras.

    Só pra cosntar, no frama principal eu tenho um JDesktopPane, e todos os forms que se abrem no programa são JInternalFrames que abrem dentro dele.

    Grato!




  1. staroski
    Posts:3414


    Comment Arrow

    Publicado em: 15/12/2009 10:13:52

    Dá uma olhada na imagem em anexo.



    F: Painel com GridLayout ou BoxLayout

    A, B, C, D, E: painéis com FlowLayout ou GridBagLayout dentro do painél G

    G: Painel com BorderLayout

    H: Painel com FlowLayout na posição WEST do painel G

    I: Painel na posição CENTER do painel G

    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    blz, mas e pro Frame principal e o JDesktopPanel? que layouts usar? pq tipo quando a resolução deminuir o frame principal deve diminuir tb junto com o JDesktopPanel. Na verdade to aqui penssando como ficaria isso. pq se o JDesktopPanel diminuir as janelas que se abrem dentro dele também devem diminuir, senão vai ficar desproporcional. Digamos que eu queira que os InternalFrames abram no centro no JDesktopPanel, se o jdesktoppanel dimunuir os internalframes devem diminuir tb para que assim possam abrir centralizados. Ou meu raciocinio não está correto?

    Como ficaria o layout dp frame principal?




  1. staroski
    Posts:3414


    Comment Arrow

    Publicado em: 15/12/2009 10:13:52

    Agora sua dúvida ficou confusa...
    Por acaso você vai ficar alterando a resolução do monitor com o aplicativo em execução? É essa sua preocupação?
    Exemplo hipotético:
    Você modelou sua janela principal para ter um tamanho normal de 1024 x 768 pixel e está preocupado em abrir ela numa máquina configurada com resolução 800 x 600 pixel?
    Nesse caso ao ser inicializado o seu aplicativo pode utilizar os métodos do link que postei no outro post e alterar a resolução na marra.


    Em relação aos layouts:
    Por default Frames possuem BorderLayout e Panels possuem FlowLayout.

    O layout do JFrame principal não haveria porque alterar, pois dificilmente seus componentes serão inseridos diretamente nele, você só vai inserir o JDesktopPane na posição BorderLayout.CENTER do Frame principal.

    Basicamente há duas alternativas para as outras telas:

    1º Criar um JDesktopPane para a tela principal e JInternalFrames para as subtelas do sistema.

    2º Criar um JPanel principal com CardLayout é criar outros JPanels para as subtelas do sistema.

    Como você optou pela primeira opção não há porque se preocupar com o layout do JDesktopPane, ele sabe se virar pra renderizar os JInternalFrames.

    Quanto aos JInternalFrames, ao abríl-os basta você dar um setLocationRelativeto(componentePai) para centralizá-los.

    Se não me engano, quando eles estão no estado maximizado eles diminuem de tamanho juntamente com o JDesktopPane se você diminuir a janela.

    Na pior das hipóteses você terá de adicionar um ComponentListener no JDesktopPane e avisar os JInternalFrames quando ele for redimensionado, se fizer isso, utilize uma classe controladora, fica mais elegante...

    Boa sorte!!!
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    Fazer o aplicativo mudar a resolução do vídeo não axo muito legal, pois o usuário pode querer realizar outras tarefas na máquia ao mesmo tempo que mexe no sistema e tb pode ter preferência por uma determinada resolução, pessoas com dificudades visuais geralmente gostam de resoluções menores (janelas grandes). se os Frames tem BorderLayout um JDesktopPanel colocado nele seria redimencionado junto com o frame no caso de aumento ou diminuição da resolução, correto? Minha preocupação é, que eu crie os internalframes com base na hipotese que o frame principal tem a resolução 1152x864, e o usuário rode a aplicação com a resolução 800x600, isso fará com que o frame principal diminua de tamanho e junto com ele tb o Jdesktoppane, se existir um internalframe que ocupava quase tudo o o desktoppane na resolução 1152x864, em 800x600 esse internalframe ficaria sendo cortado pelos limites do frame principal, resumindo, quando o usuário muda a resolução da máquina apenas o frame principal é ajustado os sobframes do sistema não são.

    Abaixo segue uma screen da mesma tela de casdatro de produtos que mandei anteriormente agora com a resolução do monitor em 800x600

    Repare que o frame principal foi perfeitamente ajustado para a nova resolução, porém os internalframes que se abrem não são, fazendo com que não caibam na tela.

    Sendo assim os internalframes teriam que diminuir tb o seu tamanho com base na nova resolução do desktoppane para que assim possam caber dentro dele. Essa screen foi tirada com as janelas em null layout, não fiz a modificação ainda.

    Existem algum layout que faça isso? Isso ja é feito automáticamente? Ou vai ser preciso implementar isso no braço?

    grato!




  1. staroski
    Posts:3414


    Comment Arrow

    Publicado em: 15/12/2009 10:13:52

    Os JInternalFrames se ajustam ao tamanho do JDesktopPane, porém eles precisam estar no estado maximizado pra isso ocorrer.
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. Script
    Posts:168


    Comment Arrow

    Publicado em: 15/12/2009 09:31:38

    ummm, quer dizer que não existe uma solução(layout ou método) pronta para isso, nem que eu usse layouts em tudo, acho que a solução seria a dica que vc deu anteriormente, de fazer o JDesktopPanel avisar que mudou de tamanho, ummm MVC na veia?

    O ruin é que não tenho experiência com esse padrão




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> GUI - (Applets, Swing, SWT, etc)