Redimensionar Janela

5 respostas
B

Ola!
Fiz uma aplicação pra controle de pizzaria no NetBeans, onde eu tenho varias classes que herdam de JFrame, ou seja, o projeto tem varias janelas.
O problema é que eu fui criando tudo pelo modo visual do NetBeans, não setei nenhum Layout Manager em nenhuma dessas classes.
Fiz a aplicação num monitor de 19 polegadas, quando abro em um monitor de 17´ a tela fica “comida”, o Frame é maior que tela, e não consigo redimensiona-lo ao executar, diminui a janela, mas os componentes do Frame ficam do mesmo tamanho.
Eu sei que pra poder redimensionar durante a execução, teria que usar algum gerenciador de Layout, mas se eu mudar o gerenciador de Layout pra um Painel por exemplo, bagunça tudo, alguns componentes até somem.
Minha duvida é a seguinte:
Tem alguma forma de mudar o Gerenciador de Layout sem “bagunçar” o Frame, ou Painel?
terei que recomeçar tudo desde o começo pra conseguir consertar isso?

Infelizmente só percebi isso agora :frowning:

5 Respostas

C

sugestao
crie um jscrollpanel, de um jscrollpanel.setviewport(seu jpanel), jscrollpane.setpreferredsize(dimension) e depois insira o jscrollpane no jframe

public class MeuFrame extends JFrame {

    JScrollPane jScrollPane;
    JPanel jPanel;

    public MeuFrame() {
        jScrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        jPanel = new JPanel();//teste
        jPanel.setBorder(BorderFactory.createLineBorder(Color.yellow, 5));//teste
        jPanel.setOpaque(true);//teste
        jPanel.setBackground(Color.red);//teste
        jPanel.setPreferredSize(new Dimension(2000, 300));//teste

        jScrollPane.setViewportView(jPanel);

        jScrollPane.setPreferredSize(new Dimension(500,500));//tamanho desejado do componente

        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(BorderLayout.CENTER, jScrollPane);

        pack();

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MeuFrame();
    }

}
B

Valeu ChronosSage
sua idéia é bacana, até usei aqui pra ver como ficava, mas não atende bem ao propósito, que seria conseguir ver a tela inteira, inclusive com o total.
Vou usar o setLayout e tentar rearranjar os elementos aqui
Obrigado!

Postei uma print da tela principal:

[URL=http://img716.imageshack.us/i/printprograma.jpg/][/URL]

Uploaded with [URL=http://imageshack.us]ImageShack.us[/URL]

B

Comecei a reconstruir a janela principal utilizando o FlowLayout, por ser o mais simples.
mas mesmo assim, ao redimensionar a janela os componentes não estão sendo remanejados.
Tem algum metodo pra remanejar os componentes quando a janela for redimensionada?

C

Bruno Ferreira:
Comecei a reconstruir a janela principal utilizando o FlowLayout, por ser o mais simples.
mas mesmo assim, ao redimensionar a janela os componentes não estão sendo remanejados.
Tem algum metodo pra remanejar os componentes quando a janela for redimensionada?

tem mas n recomendo, pois quando a janela muda de tamnho, ela avisa para todos os containers se atualizarem, e quando isso acontece cada container pede ao layout reorganizar os componentes, oq deve estar acontecendo é:

-vc setou errado o flowlayout;

-o flowlayout n faz oq vc qr, o flowlayout usa o preferredsize dos components e é sempre fixo, portanto n muda de tamanho, somente organiza as posiçoes

-existe algum outro container q impede o os componentes internos a se reorganizarem, no caso do jframe vc n pode setar diretamente, teria q usar getContentPane() e nesse container seta o layout e adicionar seus components;

-algum container esta com layout = a null ou n esta reorganizando como vc deseja

-seu container é muito grande para ser exibido, as vezes o flowlayout some com os components q n cabem no container;

-falha na atualizaçao devido a sobrescriçao de metodos dos containers ou jframe, nesse caso antes use super.metodoSobrescrito(param);

-erro devido a adicao actions q manipulam os components ou remocao de actions, vc pode sem querer ter removido algum action de resize do jframe ou do container

(respectivamente do melhor para o pior problema possivel)

mas se insiste
no jframe tem uns metodos como addWindowListener e outros parecidos, um deles é responsavel por adicionar action quando a janela muda de tamanho, para atualizar os container use “updateUI()” q será atualizado mas esse metodo so tem para containers e components swing(talvez seja necessario o uso de cast como (JPanel)getContentPane()), nao tem tbem para o jframe.

B

Eu fiquei fuçando ontem a noite, e percebi que o Flow Layout tambem não remanejava os componentes, ai tentei usar o GridBagLayout, achei ele meio complicado de início, mas até que consegui ir montando o Layout que eu quero, mas ele também não me deu o efeito desejado ao remanejar a janela. E também, se eu maximizar fica um espação sobrando em volta do frame.
Como resolver este problema, se as pessoas que vão utilizar o software podem ter monitores de varios tamanhos diferentes e varias resoluções diferentes?
Acho que vou setar as medidas do Frame para 800X600, comum nos monitores de 15 polegadas, e usar o setResize(false),
se o cara tiver um monitor maior, a janela ficara menor, mas não tera espaço sobrando em volta

Muito obrigado pela ajuda Chronos.

Criado 24 de março de 2011
Ultima resposta 26 de mar. de 2011
Respostas 5
Participantes 2