Text im Etikett nicht richtig mit setText Anzeigeverfahren
Frage
Ich versuche, den Text in einem Label dynamisch zu setzen, indem die setText Methode aufrufen, wenn eine Schaltfläche geklickt wird. Hier ist mein Code:
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");
}
}
}
Wenn ich die beiden Label-Objekte ohne Argumente, die Strings „12“ und „31“ zu initialisieren, die dem setText Methode übergeben werden, sind auf dem Bildschirm nicht sichtbar, wenn der Submit-Button geklickt wird, bis ich auf das Fenster klicken und ziehen sie es zu ändern. Ich habe dies nur auf einem Mac bemerkt. Auf einem PC sind die Saiten sind sichtbar, aber verdeckt, bis ich die Größe des Fensters. Wenn ich jedoch initialisieren die Etiketten wie folgt aus:
static Label month = new Label("0");
static Label day = new Label("0");
Auf dem Mac erscheinen die Saiten wie beabsichtigt, jedoch sind sie verdeckt, bis das Fenster verkleinert wird. Was bin ich?
Lösung
Beim validate () auf dem Rahmen wie erwähnt href="https://stackoverflow.com/questions/369823/java-gui-repaint-problem-solved"> das Problem gelöst.
Andere Tipps
Versuchen Sie, den Rahmen oder / und Satz genügend Platz neu zu streichen (setPreferredSize, setMininumSize)
Nun, die meisten Ihrer Buchung sind über ein Jahr alt, damit ich Ihnen den Vorteil des Zweifels geben werde. Ich habe nie AWT verwenden, so dass ich weiß nicht, was das Problem ist, aber ich werde vorschlagen:
1) zu können, sollen Klassen Name. „Date“ ist schon eine Klasse im JDK. Wählen Sie einen besseren Namen.
Versuchen2) Swing-Komponenten anstelle von AWT.
3) Lassen Sie sich von statischen Variablen aus Ihrer Klasse befreien.
4) Lassen Sie sich von der Window befreien den Rahmen zu schließen.
Das Codebeispiel Sie hier geschrieben ist 10-15 Jahre alt. Versuchen Sie, etwas neuer. Beginnen Sie mit dem Swing-Tutorial für neuere Beispiele.