Pregunta

Estoy tratando de establecer el texto de una etiqueta dinámica llamando al método setText cada vez que se hace clic en un botón. Aquí está mi 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");
        } 
    }
}

Cuando inicializar los dos objetos de la etiqueta sin ningún argumento, las cadenas "12" y "31" que se pasan al método setText no son visibles en la pantalla cuando se hace clic en el botón hasta que haga clic en la ventana y el submit arrastrar para cambiar su tamaño. Me he dado cuenta de esto sólo en un Mac. En un PC, las cadenas son visibles pero son oscurecida hasta que cambio el tamaño de la ventana. Sin embargo, si inicializar las etiquetas de esta manera:

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

En el Mac, las cadenas aparecen como estaba previsto, sin embargo, que están oscurecidos hasta que se cambia el tamaño de la ventana. ¿Qué me falta?

¿Fue útil?

Solución

Llamar a validar () en el marco como se mencionó aquí resolvió el problema.

Otros consejos

Trate de volver a pintar el marco o / y establecer espacio suficiente (setPreferredSize, setMininumSize)

Bueno, la mayor parte de su fijación son más de un año de edad, así que voy a dar el beneficio de la duda. Nunca uso de AWT, así que no sé cuál es el problema, pero voy a sugerir:

1) usted Nombre clases correctamente. "Fecha" ya es una clase en el JDK. Elegir un nombre mejor.

2) Trate de usar los componentes Swing en lugar de AWT.

3) Se puede olvidarse de las variables estáticas de su clase.

4) Deshacerse de la WindowListener para cerrar el cuadro.

El ejemplo de código que envió aquí es de 10-15 años de edad. Probar algo nuevo. Comenzar con el oscilación tutorial para ejemplos más recientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top