[quote=Osmarsousa]cara se vc for esperar q eles fiquem te ajudando vai ser dificil.
fique atento.[/quote]
Gostaria de saber com base em quê vc diz isso, uma vez que este é o seu primeiro post… Please, don’t be a troll!
…
Olá, tours!
:arrow: Primeiro de tudo, deixa eu te contar um segredinho sobre o JFrame: Basicamente, um JFrame tem, dentro dele, um Container. A grosso modo, é como se um JFrame fosse uma janela (com aquela barrinha de título bonitinha, com borda e tal) que serve pra te exibir um Container, que é uma classe de java que abstrai recipientes de componentes GUI (Graphic User Interface: caixa de texto, botões, barras de rolagem, etc).
Não se deve inserir componentes direto em um JFrame, como vc fez:
add(texto);
...
add(b1);
O ideal é “ter em mãos” aquele Container interno ao JFrame e adicionar neste os componentes. Vc pode fazer isso assim:
public TarefaCasa(){
Container c = getContentPane();
...
c.add(texto);
...
c.add(b1);
...
}
Outra coisa: Os containers trabalha com um conceito de layout, que determina como que os componentes adicionados serão distribuídos dentro do Container. Para configurar qual o layout de um container, vc deve utilizar o método setLayout(LayoutManager). LayoutManager é uma interface(pesquise mais sobre interfaces em java) implementada por classes que se destinam a configuração de layout de containers. Uma exemplo de classe que implementa LayoutManager é a classe FlowLayout.
Se no seu programa, vc fizesse assim:
public TarefaCasa(){
Container c = getContentPane();
FlowLayout layout = new FlowLayout();
c.setLayout(layout);
...
c.add(texto);
...
c.add(b1);
...
}
cada componente que vc adicionasse ao Container “c”, seria colocado um depois do outro, seguindo o [b]fluxo/b, a ordem em que são adicionados.
Executei aqui o seu programa, e o que aconteceu foi que o botão “salvar” acupou o seu JFrame inteiro. Por quê?
Um JFrame, por default, vem com o layout do seu Container interno configurado com um BorderLayout. O BorderLayout é outra classe que implementa aquela interface LayoutManager.
Quando vc configura um layout de um Container utilizando o BorderLayout, os componentes que vc adiciona ao Container são distribuídos de uma forma um pouco mais sofisticada, a saber.
O seu container é dividido em cinco partes imaginárias:

Como o JFrame, por padrão, vem com o layout do seu container configurado com o BorderLayout, quando vc faz
c.add(texto);
O Container “c” vai adicionar o seu JTextField na região “CENTER” daquela divisão imáginária(divisão lógica). Se vc quisesse adicionar seu JTextField “texo”, por exemplo, na região “NORTH”, voce faria algo assim
c.add(texto, BorderLayout.NORTH);
Mas, blablabla à parte, por que diabos o botão “salvar” ocupou todo Container do seu JFrame???
Cada região imaginária é feita pra exibir apenas 1 componente, que será automaticamente dimensionado de forma a ocupar todo o espaço disponível pela respectiva área onde está inserido. No seu código, vc dá um add após o outro, sem especificar a região. Ou seja, o seu programa entucha o “texto” no CENTER, depois entucha o “b1” no CENTER de novo, e assim vai, até adicionar o último botão, que é quem??? o “b4”, que é exatamente o botão “salvar”.
Seu programa adicionou todos os componentes em uma mesma área do Container, fazendo com que apareça no final apenas o último componente inserido.
Mas então, por que não ficou um botãozinho no meio da tela, ao invéz de um botão que pegou o JFrame todo??? Porque o BorderLayout faz com que todos espaços seja aproveitados, ou seja, se só tem componentes inseridos no “Center”, o center vai pegar ocupar o Container todo. E por aí vai…
Perceba que, neste caso, não adianta nada vc dar um setBounds nos seus componentes para determinar seus respectivos tamanhos e posições. Eles sempre vão se localizar em uma das 5 áreas e terão sempre o mesmo tamanho destas áreas.
Vc pode definir o layout de um container também com um null. Isto fará com que a distribuição dos componentes dentro do container seja livre. Só que nesse caso, vc tem que dar um setBounds para cada componente inserido, se não, eles simplesmente não aparecem.
Como vc já escrevou os setBounds em questão, é mais fácil, no seu caso, setar o layout do Container do seu JFrame como null, por que aí, será respeitada aquelas dimensões que vc especificou para os botões e para o campo de texto.
public TarefaCasa(){
Container c = getContentPane();
FlowLayout layout = new FlowLayout();
c.setLayout(layout);
...
c.add(texto);
...
c.add(b1);
...
}
:arrow: Vc deve estar se perguntando: “Porque diabos o seu botão ‘novo’ apenas habilita o campo de Texto, e não limpa o texto antigo??? Por que essa m… de método chamado ‘removeAll’ não funciona???”
O método removeAll() funciona sim, mas ele não “remove” o texto… O método removeAll() é um método que aparece em todos os componentes gráficos que herdam(pesquise mais sobre herânça) da classe Container, que é o caso da classe JTextField. Este método serve para remover todos os outros componentes de dentro do Container. Este método faria mais sentido quando invocado a partir, por exemplo, daquele Container “c”, aquele! Interno ao JFrame! Mas não faça isso, ok? Vc não quer que sumam todos os componentes gráficos que vc inseriu na sua javela, não é mesmo? :lol:
Para limpar o texto, nada melhor que trocar todo o texto existente por um texto em branco! é o abre-fecha-aspas:
texto.setText("");
Espero ter ajudado. Mas agora, alguns toques:
:arrow: Evite escrever “problema estranho”. Descreva o tal problema “estranho”. Minha mãe, meus chegados, minha namorada não me acham “estranho”, mas conheço um monte de gente que assim me acha… Quanto mais minuciosa for a descrição de um problema, masi fácil fica para nós te ajudarmos
:arrow: Cuidado com a lição de casa! É muito mal visto por nós as pessoas que se aproveitam da boa vontade do pessoal aqui pra ganhar trabalhinho prontinho de graça. Não creio que seja o teu caso. Mas sempre é bom avisar.
:arrow: Procure agora dar uma pesquisada sobre:
[list]componentes swing[/list]
[list]JFrame[/list]
[list]LayoutManager[/list]
Divirta-se!