O texto no rótulo não é exibido corretamente com o método setText
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?
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.