Java JFrame - это очень странно
Вопрос
Когда я запускаю это, JLabel не отображается, но когда я изменяю размер окна (с помощью мыши) Отображается JLabel.Почему?
import javax.swing.*;
import java.awt.*;
public class FrmTaoLogin extends JFrame {
private JPanel pnlLeft = new JPanel();
public FrmTaoLogin() {
super();
pnlLeft.setBorder(BorderFactory.createEtchedBorder());
pnlLeft.add(new JLabel("test1"));
getContentPane().add(pnlLeft,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200, 200);
}
public static void main(String[] args) {
FrmTaoLogin FrmLogin = new FrmTaoLogin();
FrmLogin.setVisible(true);
}
}
Решение
Это похоже на некоторые ошибки L & F в старых виртуальных машинах Java на более новой ОС.Например, в Windows 7 большинство проблем решается сначала с помощью 1.6.0_17.Вы должны запустить свою программу с консоли.Если вы видите какие-то трассировки стека в потоке событий, то это проблема с ошибкой L & F.
Другие советы
IIRC, это происходит, когда вы не вызываете Frame.pack().Это должно сработать, если вы вызовете 'pack()' в качестве последней строки конструктора.
Я подозреваю, что проблема здесь может быть связана с попыткой создать и показать ваши компоненты GUI за пределами Качающаяся нить.
Что, если ты изменишься main()
чтобы вызвать ваш графический код в потоке Swing, вот так?
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FrmTaoLogin FrmLogin = new FrmTaoLogin();
FrmLogin.setVisible(true);
}
});
}
Спасибо всем, проблема решена.Я меняю тему Windows, и все работает нормально.Я думаю, что это проблема Windows Aero и моей NVIDIA GeForce FX5500.Эта официальная карта не работает с Windows Aero.