Galera.
Queria uma forma de, ao clicar em um botão o JFrame Atualizasse os JLabels, pegando os novos valores das Strings que estão como parâmetro dos mesmos.
Gostaria também de uma forma e fechar um JFrame sem fechar a aplicação, através de um objeto JButton instanciado. Ou seja, queria que o mesmo JButton da Classe Botoes fechasse as janelas dos JFrames Tela1, Tela2 e Tela3. caso não tenha como, me passe como fazer ele fechar normalmente mesmo, colocando o Jbutton na própria classe (obs: não quero fechar todo o programa).
Obrigado
alcampagnani, posta seu codigo ai para gente dar uma olhada
falowsss
Pra atualizar tudo tudo pode usar:
jFrame.repaint();
jFrame.validate();
sobre o botão fechar tenta:
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(WindowAdapter() {
public void windowClosing(WindowEvent evt) {
fecharJanela(evt);
}
});
public void fecharJanela(WindowEvent evt){
//Pega os frames que tu que fechar e faz
frame.dispose();
}
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
Meu querido, valeu pela dica, vou tentar. Agora, esse setDefault deve ser colocado onde??? na no metodo construtor da classe que eu quero fechar,no metodo construtor da classe que eu criei o botão??? Em alguem metodo??
o Do_NOTHING_ON_CLOSE deve ser colocado no na classe que que extende JFrame e que você não que seja fechada ao ser clicado no X. Não sei se é isso que vc qué.
Cara…
o metodo fecharjanela eu ponho dentro do metodo MAIN? Não tem como ne olha só como que ficou:
[code]
public void fecharJanela(WindowEvent evt){
dispose();
}
public static void main( String args[] )
{
Novo app = new Novo();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
fecharJanela(evt); //não acessa a não ser com objeto, e eu não consigo acessar .app desse método.
}
}
);
}
}[/code]
O mesmo problema com o repaint. Eu tento acessar ele da classe que eu criei pro evento PESQUISAR ( que irá colocar os dados na tela) e só criando um novo objeto que que consigo.
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
BancoDeDados bd = new BancoDeDados();
bd.consultar();
Pagamento pag = new Pagamento();
pag.repaint();
}
}
}
Cara…
o metodo fecharjanela eu ponho dentro do metodo MAIN? Não tem como ne olha só como que ficou:
[code]
public void fecharJanela(WindowEvent evt){
dispose();
}
public static void main( String args[] )
{
Novo app = new Novo();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
fecharJanela(evt); //não acessa a não ser com objeto, e eu não consigo acessar .app desse método.
}
}
);
}
}[/code]
O mesmo problema com o repaint. Eu tento acessar ele da classe que eu criei pro evento PESQUISAR ( que irá colocar os dados na tela) e só criando um novo objeto que que consigo.
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
BancoDeDados bd = new BancoDeDados();
bd.consultar();
Pagamento pag = new Pagamento();
pag.repaint();
}
}
}
O windowClosing deve ser colocado no construtor da que extende Jframe e você deseja capturar o evento da janela sendo fecha pelo X. De preferencia para que você consiga acessar as variáveis locais é bom chamar outro método privado no windowClosing, como vc fez ali no segundo trecho de código está ok, só basta dar um jframeQueVcDesejaFechar.dispose.
Eu acho que o repaint não está funcionando pq vc fez numa inner class, faz igual ao window closing --> chama outro método.
Cara…
não consegui entender…
teria como você fazer ai para eu ver??
public Novo(){
......
c.add( painel_Rodape, BorderLayout.SOUTH );
setSize( 230, 300);
setVisible( true );
}
public void fecharJanela(WindowEvent evt){
dispose();
}
public static void main( String args[] )
{
Novo app = new Novo();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
fecharJanela(evt);
}
}
);
}
}
[code]
public Pagamento(){
…
c.add(painel_Rodape, BorderLayout.SOUTH);
setSize( 600, 250);
setVisible( true );
}
public static void main( String args[] )
{
Pagamento app = new Pagamento();
app.construir();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
}
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
BancoDeDados bd = new BancoDeDados();
bd.consultar();
Pagamento pag = new Pagamento();
pag.repaint();
}
}
}[/code]
Cara se continuar assim eu vou postar, postar e tu mão vai resolver o teu problema.
Faz o seguinte coloca todo o teu código ai (ou pelo menos um versão compilável com o frame principal e o frame de ser fechado pelo principal).
Ou manda pro meu email ivorcosta@gmail.com
que eu faço pra ti esse método
Cara tem um onte de coisa errada no teu código, mas vamos ao que interessa:
Não está sendo dado um update no labels pq vc está chamando ele da inner class, então mude:
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
BancoDeDados bd = new BancoDeDados();
bd.consultar();
Pagamento pag = new Pagamento();
pag.repaint();
}
para:
private void acaoBotaoPesquisar(ActionEvent e){
BancoDeDados bd = new BancoDeDados();
bd.consultar();
repaint();
}
private class PesquisarAcao implements ActionListener {
public void actionPerformed(ActionEvent e) {
acaoBotaoPesquisar(e);
}
}
detalhe, não entendi como é que tu tá setando os valores do banco nos labels, verifica se realmente tu tá fazendo isso.
Sobre o botão fechar:
ficou muito esquisito esse negócio que tu fez de criar uma classe botão com os botões padrões e métodos padrões. Eu não achei muito legal mas se tu quiser continuar assim tem que fazer o seguinte:
tira essa parte no construtor do botões:
FecharAcao fe = new FecharAcao();
fechar.addActionListener ( fe );
tira a inner class que tenta fechar o JFrame:
private class FecharAcao implements ActionListener {
public void windowClosed() {
System.exit(0);
}
public void actionPerformed(ActionEvent e) {
windowClosed();
}
}
e tu vai ter colocar nas três classe que chama o fechar o evento fechar:
na classe novo:
b.fechar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Novo.this.dispose();
}
});
painel_Rodape.add(b.fechar);
Eu acho que tentei arrumar as uas classes mais não queria mecher no teu jeito de programar, então faz essas mudanças que vai funcionar.
flw!
Bom… testei o atualizar e não acontece nada…
eu acho q eu devo estar dando um vacilo feio.
Com certeza a pesquisa no banco ta sendo feita… mas atualizar os valores que é bom nada…
private void acaoBotaoPesquisar(ActionEvent e){
bd.consultar();
repaint();
}
public static void main( String args[] )
{
Pagamento app = new Pagamento();
app.construir();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
}
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
acaoBotaoPesquisar(e);
}
}
}
[quote=alcampagnani]Bom… testei o atualizar e não acontece nada…
eu acho q eu devo estar dando um vacilo feio.
Com certeza a pesquisa no banco ta sendo feita… mas atualizar os valores que é bom nada…
[code]
private void acaoBotaoPesquisar(ActionEvent e){
bd.consultar();
repaint();
}
public static void main( String args[] )
{
Pagamento app = new Pagamento();
app.construir();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
}
private class PesquisarAcao implements ActionListener {
public void actionPerformed (ActionEvent e ) {
acaoBotaoPesquisar(e);
}
}
}
[/code][/quote]
tentei tbm dando repaint e revalidate em cada jlabel e nada…
O que é que não está funcionando?
O botão fechar está ok agora?
Sobre a busca no banco após tu fazer a busca no banco é necessário setar os resultados da busca nos labels antes de tentar atualizar.
Faz um teste ai:
No botão pesquisar ao invés de colocar os resultados da busca no label coloca uma String qualquer tipo “teste”, e depois atualiza, se funcionar o problema ta na busca.
Fallaa… ivo
Cara, ta setando sim, se eu por um System.out.println com os valores aparecem os corretos, alem disso, se eu crio um novo objeto do JFrame ele aparece, com os valores certinhos, atualizados.
O fechar ta funcionando certinho sim.
Eu tentei ontem atualizar só o valor dos JLabels, com o jlabel.repaint() e jlabel.revalidate() mas ta dando erro…
Isso ae tá funcionando, ve se te da uma luz:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Teste extends JFrame {
private JButton botao;
private JLabel label;
public Teste(){
botao = new JButton("OK");
label = new JLabel("1");
getContentPane().setLayout(null);
setPreferredSize(new Dimension(100, 100));
botao.setBounds(20, 30, 60, 30);
label.setBounds(50, 10, 20, 20);
botao.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
atualizarLabel(evt);
}
});
add(botao);
add(label);
pack();
}
private void atualizarLabel(ActionEvent evt){
if(label.getText().equals("1")){
label.setText("2");
repaint();
}
else{
label.setText("1");
repaint();
}
}
public static void main(String[] args) {
new Teste().setVisible(true);
}
}
Ok, descobri o problema
private String tela_FraseTxt = "Cadastro do pagamento de " + bd.bd_Matricula +", de " + bd.bd_Mes +" de "+ bd.bd_Ano;
private String tela_VencimentoTxt = "Vencimento: " + bd.bd_Vencimento ;
private String tela_ValorTxt = "Valor: R$" + bd.bd_Valor ;
private String tela_MultaTxt = "Multa: R$" + bd.bd_Multa;
private String tela_DescontoTxt = "Desconto: R$" + bd.bd_Desconto;
private String tela_MensalidadeTxt= "Mensalidade: R$" + bd.bd_Mensalidade;
private String tela_PagamentoTxt = "Status do Pagamento: " + bd.bd_Pagamento;
Esse são os textos dos JLabels. Eles não estavam atualizando com o repaint. Quando dei um frase.setText(“Cadastro do pagamento de " + bd.bd_Matricula +”, de " + bd.bd_Mes +" de "+ bd.bd_Ano) ao inves de frase.setText(tela_FraseTxt) atualizou…
por que será??
Pq vc estava setando os Strings antes de fazer a busca no banco, ou seja não tava colocando nada.
Você tem que setar os strings depois de chamar o método buscar, e não quando a classe é instanciada.
Valeu por toda a ajuda ivo…
o trabalho ficou bacana…
abraços.