Pergunta

Eu estou Preso com a redimensionar o terceiro botão tornou-se o mesmo tamanho, assim como os outros dois e coloque-o no fundo.

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
Foi útil?

Solução

Duas sugestões:

1) colocar coisas comuns para a inicialização de instância do bloco.Pessoalmente, eu arrepio-me sempre que vejo uma chamada a" ()".

{ isso.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}

ControlFrame() { super("Quadro de Controle");}

ControlFrame(int x,int y, int w, int h) { super("Quadro de Controle");...}

2) gostaria de se livrar do x, y, w, h construtor...pessoalmente, eu tenho uma classe chamada WindowUtils que tem uma "posição" método que calcula o tamanho do ecrã e, em seguida, utiliza os valores passados para criar uma janela que é o tamanho relativo da tela.Em seguida, o código que cria a janela de chamadas.Eu prefiro ter poucos construtores possível (muitas vezes é zero ou um, eu quase nunca têm dois ou mais).

3) isso.getContentPane().adicionar(jb_inc);pode agora ser escrito como adicionar(jb_inc);- desde o JDK 1.5, eu acho.

4) nunca chame overrideable métodos (todas as coisas que você tem isso.antes de) dentro do construtor.Se uma subclasse foram para substituir "add", você poderia ver as coisas de quebra.Assim você pode chamar super.add(), ou fazer o adiciona no outro método, ou fazer a sua classe final.

Agora, respondendo a sua pergunta...:-)

Você precisa fazer uso de LayoutManagers para obter o que deseja.

Dependendo do que você quer, você provavelmente vai querer usar um BorderLayout, assim você pode começar o botão na parte inferior.

Outras dicas

Eu sugiro que você comece lendo a seção do tutorial de balanço sobre Usando gerentes de layoutSeu código não funcionará porque você está tentando adicionar três componentes ao "centro" da borda que não funcionará. Escolha um LayoutManager que melhor atenda às suas necessidades.

Não há necessidade de usar o método SetBounds (...) ao usar um gerenciador de layout. O trabalho do gerente de layout está posicionando os componentes com base nas regras do gerente de layout. O tamanho preferido de cada botão deve ser o mesmo, pois você não adicionou nenhum texto aos botões.

Além disso, não há necessidade de invocar setVisible () nos botões, todos os componentes de giro são visíveis por padrão, exceto os contêineres de nível superior (JFrame, JDialog).

Como você está definindo limites em tudo, você não precisa de um manager de layout. Defina o seu LayoutManager como NULL, então você pode posicionar tudo sozinho, como está no seu exemplo.

this.setLayoutManager(null)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top