JButton cobre o tamanho da tela inteira!

10 respostas
M

Olá pessoal.

Não consigo diminuir o JButton ou mover, já usei “setBounds”, “setLocation”, mas de nenhum jeito, consigo diminuir e mover.
Segue a parte do JButton:

Button entrar = new JButton("Entrar");
    public graphics(){ // Define a função.  
     //Define o título da janela  
     super("Entre no sistema!"); 
     entrar.setBounds(1, 3, 4, 5); 
     entrar.setLocation(1,4);
     add(entrar);
        }

Onde “graphics” é o nome da classe.

Agradeço desde já,
Mijuaho.

10 Respostas

lazaropj

Cara… o setBounds é mais usado para propriedade do JFrame…

para alterar o tamanho do botão é

JButton botao = new JButton(“Entrar”);
botao.setSize(int largura, int altura);

no setBounds vc deve setar 4 ints… aond os 2 primeiros são a localizão do frame na tela e os dois ultimos são largura e altura.

da uma olhada nesse link…

http://www.guj.com.br/posts/list/44965.java

Espero ter ajudado…

abraço

R

Outra coisa, por padrão o LayoutManager do JFrame é BorderLayout. Levando isso em conta, ao usar JFrame.add(componente), se for o primeiro elemento adicionado ao JFrame, ele irá ocupar a posição CENTER do formulário e portanto ocupará todo o espaço disponível. Assim, sugiro testar mudando o LayoutManager do formulário para null:

frame.setLayoutManager(null);

Se não fizer isso, setBounds() e setSize() não funcionarão adequadamente.

pedroroxd

[size=18]NÃO[/size] recomendo vc usar o nulllayout…
NUNCA
NUNCA
NUNCA MESMO!

As telas podem ficar “bonitinhas”, mas em monitores de outras resoluções acabam perdendo isso…
Se vc não colocar o resizable(false); a pessoa vai poder mecher no tamanho da tela, e os componentes não mudam de tamanho tb…
Tu vai ficar mal acostumado e vai acabar se $^&%&**(!# …

Recomendo que você Aprenda a usar um gerenciador de layout como o MigLayout.
É uma tecnologia relativamente nova, e muito boa…
Vale a pena testar

R

Reforçando o comentário do pedroroxd, na medida do possível deve-se evitar usar NullLayout (e, em menor grau, AbsoluteLayout). Eu uso o construtor de GUI do NetBeans (antigo Matisse, hoje GUI Builder) e tenho obtido excelentes resultados.

ViniGodoy

Eu usava o Visual Editor, do eclipse, e os layouts FlowLayout, BorderLayout e Gridbaglayout, também com ótimos resultados. Pra quem vai fazer no braço, o MigLayout é realmente excelente.

lazaropj

Eu fiz no braço e usei o GridLayout juntamente com o FlowLayout…

Mas fica a dica…

pega o NetBeans, gera o layout e manda pro Eclipse…

Fica melhor…

abraço!!!

pedroroxd
lazaropj:
Mas fica a dica... pega o NetBeans, gera o layout e manda pro Eclipse... Fica melhor... abraço!!!
PELO AMOR DE DEUS! Não faz isso não cara.. Vai se arrepender.. Netbeans gera 1 código em japonês -.- Do tipo:
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());  
         getContentPane().setLayout(layout);  
         layout.setHorizontalGroup(  
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
             .addGroup(layout.createSequentialGroup()  
                 .addContainerGap()  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                     .addGroup(layout.createSequentialGroup()  
                         .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                         .addComponent(celsiusLabel))  
                     .addGroup(layout.createSequentialGroup()  
                         .addComponent(convertButton)  
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                         .addComponent(fahrenheitLabel)))  
                 .addContainerGap(27, Short.MAX_VALUE))  
         );  
   
         layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});  
   
         layout.setVerticalGroup(  
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
             .addGroup(layout.createSequentialGroup()  
                 .addContainerGap()  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                     .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                     .addComponent(celsiusLabel))  
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                     .addComponent(convertButton)  
                     .addComponent(fahrenheitLabel))  
                 .addContainerGap(21, Short.MAX_VALUE))  
         );  
         pack();  
     }// </editor-fold>//GEN-END:initComponents
Ele até roda no eclipse.. Mas do parabéns para quem conseguir ler esse código -.-
M

Pessoal, ainda não consegui…
Botei o setSize e não deu…

O JButton fica sempre do tamanho da tela…

O que eu faço?

lina

Oi,

O problema é que você está utilizando um layout para a sua tela.

Se você realmente não sabe o que é layout ou não definiu nenhum! É porque por padrão um JFrame já vem instanciado com o BorderLayout.

Caso queira continuar utilizando os método setBounds() ou setSize() para os seus componentes, você deverá utilizar o famoso setLayout(null);
Obs: Coloque exatamente este código em seu construtor.

Como o pessoal já falou, não é recomendado utilizar null layout, pois o mesmo não garante portabilidade entre os Sistemas Operacionais. Porém não vejo problema nenhum em utiliza-lo para aplicações de pequena e simples escala.

Tchauzin!

M

Coloquei no construtor e deu certo.
Obrigado a todos!

Criado 15 de dezembro de 2009
Ultima resposta 16 de dez. de 2009
Respostas 10
Participantes 6