Pergunta

Estou tentando definir o texto em um rótulo dinamicamente, chamando o método setText sempre que um botão é clicado.Aqui está o meu código:

import java.awt.*;
import java.awt.event.*;

class Date {
    public static void main(String[] args) {
        new MainWindow();
    }
}

class MainWindow {
    static Label month = new Label();
    static Label day = new Label();
    static Button submit = new Button("Submit");

    MainWindow() {
        Frame myFrame = new Frame("Date Window");
        myFrame.setLayout(new FlowLayout());
        myFrame.add(month);
        myFrame.add(day);
        myFrame.add(submit);
        submit.addActionListener(new ButtonListener());

        myFrame.addWindowListener(new WindowListener());        
        myFrame.setSize(200, 200);
        myFrame.setVisible(true);
    }
}

class WindowListener extends WindowAdapter {
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

class ButtonListener implements ActionListener  {
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == MainWindow.submit) {
            MainWindow.month.setText("12");
            MainWindow.day.setText("31");
        } 
    }
}

Quando inicializo os dois objetos Label sem nenhum argumento, as strings "12" e "31" que são passadas para o método setText não ficam visíveis na tela quando o botão enviar é clicado até que eu clique na janela e arraste para redimensionar isto.Percebi isso apenas em um Mac.Em um PC, as strings ficam visíveis, mas obscurecidas até que eu redimensione a janela.No entanto, se eu inicializar os rótulos assim:

    static Label month = new Label("0");
    static Label day = new Label("0");

No Mac, as strings aparecem conforme o esperado, porém ficam ocultas até que a janela seja redimensionada.o que estou perdendo?

Foi útil?

Solução

Chamando validate () no quadro, conforme mencionado aqui resolveu o problema.

Outras dicas

Tente repintando o quadro ou/e defina espaço suficiente (setPreferredSize, setMininumsize)

Bem, a maioria das suas postagens tem mais de um ano, então darei a você o benefício da dúvida.Eu nunca uso AWT, então não sei qual é o problema, mas vou sugerir:

1) Nomeie suas aulas corretamente."Date" já é uma classe no JDK.Escolha um nome melhor.

2) Tente usar componentes Swing em vez de AWT.

3) Livre-se das variáveis ​​estáticas da sua classe.

4) Livre-se do WindowListener para fechar o quadro.

O exemplo de código que você postou aqui tem de 10 a 15 anos.Experimente algo mais novo.Comece com o Tutorial de balanço para exemplos mais recentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top