gpt4 book ai didi

java - JFrame 标题在失去焦点之前不会改变

转载 作者:行者123 更新时间:2023-11-29 03:47:56 24 4
gpt4 key购买 nike

基本上我有一个用于简单文本编辑器的 JFrame。您正在处理的文件名出现在标题中。因此,我设置了一些代码以在必要时更改标题,它被调用得很好。

问题是调用代码后 JFrame 标题不会改变。 getTitle() 函数和所有内容都显示标题已更改。只有当您不再关注 JFrame 时,标题才会以图形方式实际发生变化。

我实现的一个快速而肮脏(非常如此)的修复是 toBack() 后跟 toFront() 有效地迫使你失去焦点 - 这以一种非常丑陋的方式实现了这一目的。

我已经尝试过 invalidate() 和 validate()、各种 repaint() 调用和 setVisible(true),但都没有成功。

我已经做了一些搜索,但似乎找不到解决方案,这是一个小错误,但很烦人。有没有人有一些见解?

这是我使用的代码

private void() updateTitle() {
setTitle(((filename == null) ? "untitled" : filename) + ((unsaved) ? "*" : ""));
toBack();
toFront();
}

这一切都在一个扩展 JFrame 的类中。

编辑:

值得一提的是,没有循环或线程或任何占用 EDT 的东西。只是简单明了的东西。禁用所有监听器和所有内容以尝试调试它。 SetTitle 在程序的其他地方被调用。如果我将 getTitle() 结果打印到控制台,它会告诉我标题应该显示,但不会显示,直到焦点在窗口上丢失

编辑2:

原来只是我的jdk出错了。重装jdk解决了问题。抱歉误导了大家,感谢您的回复。

最佳答案

这个简单的示例(只需调用 setTitle())对我有用:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame2
{
public static void main( String[] args )
{
final JFrame frame = new JFrame( );

JButton button = new JButton( "press me" );
button.addActionListener( new ActionListener( )
{

@Override
public void actionPerformed( ActionEvent e )
{
frame.setTitle( "New Title" );
}

} );

frame.setTitle( "Title" );
frame.add( button );
frame.setSize( 400, 400 );
frame.setVisible( true );
}
}

需要注意的一件事:您应该在 Event Dispatch Thread 上调用 setTitle() .

如下调整您的方法可能会有所帮助:

private void() updateTitle() {
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run( )
{
setTitle(((filename == null) ? "untitled" : filename) + ((unsaved) ? "*" : ""));
}
});
}

关于java - JFrame 标题在失去焦点之前不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060502/

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