Java JFrame的内容未显示
当用户在一个Java JFrame的内容未显示,java,swing,jframe,joptionpane,thread-sleep,Java,Swing,Jframe,Joptionpane,Thread Sleep,当用户在一个JFrame-frame中点击“close”时,我希望在程序退出前显示JFrame-credits显示我的姓名和内容2.5秒。现在,credits正在显示,但如果没有textArea和按钮,则显示为空,无法找到问题所在 这是我的密码: 对于帧的关闭操作 frame.addWindowListener(new java.awt.event.WindowAdapter() { @Override public
JFrame-frame
中点击“close”时,我希望在程序退出前显示JFrame-credits
显示我的姓名和内容2.5秒。现在,credits
正在显示,但如果没有textArea
和按钮,则显示为空,无法找到问题所在
这是我的密码:
对于帧的关闭操作
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
int result = JOptionPane.showConfirmDialog(null, "Sind Sie sicher?", "Schließen", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (result == JOptionPane.YES_OPTION){
credits.setVisible(true);
try {
Thread.sleep(2500);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.exit(0);
} else {
//do nothing
}
}
});
对于学分
(仅初始化帧的类):
}
有什么快速修复的建议吗?谢谢
有什么快速修复的建议吗
是的,不要在Swing事件线程上调用Thread.sleep(…)
,除非您想让整个GUI进入睡眠状态。相反,使用一个函数来处理延迟。基本上,计时器的ActionListener将在毫秒延迟过后调用
e、 g
还有,看看
未来会影响你的其他问题:
- 您似乎正在使用空布局和设置边界。虽然null layouts and setBounds()似乎是创建复杂GUI的最简单、最好的方法,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家巫婆,它们在滚动窗格中完全失败,在所有不同于原始平台的平台上查看时,它们看起来非常糟糕
- 永远不要设置JTextAreas边界,因为如果将其放置在JScrollPane中并且添加了超出显示范围的文本,则会使其完全失败——滚动条似乎不起作用,因为您人为地限制了文本组件的大小
您能否发布实例化credits
变量的代码?我知道绝对布局非常不一致,但框架无法调整大小,因此至少不会弄乱它们。谢谢你提出的解决方案,做了一些调整。@Zi1mann:别说我没有警告你。只需等待你创建一个复杂的GUI,然后发现你需要在中间添加一个更多的JReloBut纽。如果将嵌套的JPanel与布局管理器一起使用,那么这将是一个非常简单的修复方法。如果使用空布局,则必须手动调整每个组件的位置,并希望它能在所有平台上工作。运气。
public class CreditsFrame extends JFrame {
Positioner pos = new Positioner();
private JPanel contentPane;
ImageIcon frameIcon = new ImageIcon("files/images/frameicon.png");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CreditsFrame frame = new CreditsFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public CreditsFrame() {
setIconImage(frameIcon.getImage());
setAlwaysOnTop(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(pos.posX(pos.screenX, 441), pos.posY(pos.screenY, 210), 441, 210);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JTextArea txtarea = new JTextArea();
txtarea.setBounds(10, 11, 415, 125);
txtarea.setEditable(false);
txtarea.setBackground(Color.WHITE);
txtarea.setWrapStyleWord(true);
txtarea.setLineWrap(true);
txtarea.append("created by & more here");
contentPane.setLayout(null);
contentPane.add(txtarea);
JButton btnOk = new JButton("Ok");
btnOk.setBounds(154, 147, 89, 23);
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
contentPane.add(btnOk);
}
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
int result = JOptionPane.showConfirmDialog(null, "Sind Sie sicher?", "Schließen", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (result == JOptionPane.YES_OPTION){
credits.setVisible(true);
new Timer(2500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit();
}
}).start();
} else {
//do nothing
}
}
});