gpt4 book ai didi

java - JFrame 的内容不显示

转载 作者:行者123 更新时间:2023-11-30 03:12:00 24 4
gpt4 key购买 nike

当用户在一个 JFrame 框架 中点击“关闭”时,我希望在程序退出之前显示 JFrame 制作人员 2.5 秒,其中显示我的姓名和内容。现在,credits 已显示,但没有 textAreaButton 而是空的 - 找不到问题所在。

这是我的代码:用于frame的关闭操作

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
}
}
});

对于学分(只是初始化框架的类):

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);
}

}

有什么快速修复的建议吗?谢谢。

最佳答案

Any suggestions for a quick fix?

是的,不要在 Swing 事件线程上调用 Thread.sleep(...),除非您想让整个 GUI 进入休眠状态。而是使用 Swing Timer来处理延迟。基本上,计时器的 ActionListener 将在毫秒延迟过去后被调用。

例如,

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
}
}
});

另外,请查看The Use of Multiple JFrames, Good/Bad Practice?

将来会困扰您的其他问题:

  • 您似乎使用了 null 布局和 setBounds。虽然 null 布局和 setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单、最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,放置在滚动 Pane 中时它们完全失败,在不同于原始平台的所有平台上查看时它们看起来非常糟糕。
  • 永远不要设置 JTextAreas 边界,因为如果将其放置在 JScrollPane 中并且添加的文本超出了可以显示的范围,这将使其完全失败 - 滚动条似乎不起作用,因为您人为地限制了 JScrollPane 的大小文本组件。

关于java - JFrame 的内容不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com