我是Java
GUI编程的新手,当我将setVisible()
函数放置在构造函数调用的函数的开头时,面板中的组件丢失了,但在结尾处却可以正常工作。参见下面的代码:
public static void main(String[] args)
{
new MainClass();
}
public MainClass()
{
setFrame();
}
private void setFrame()
{
JFrame frame = new JFrame();
frame.setSize(400,400);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Some area where the object of my components inside the panel is created and initialized.
// If I just place a label and a button, it will appear on the panel. However if I add the JTextArea, all the components in my panel is gone. Just like the code below.
textArea1 = new JTextArea(20,34);
textArea1.setWrapStyleWord(true);
textArea1.setLineWrap(true);
JScrollPane scroll =
new JScrollPane(textArea1,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(scroll);
frame.add(panel);
// Works fine when setVisible(true); it placed here.
}
将setVisible()
函数放置在方法的开头或结尾可能是什么问题。
正如评论和其他答案中已经指出的那样:
setVisible(true)
添加完所有组件后,您应该在最后致电。
这不会直接回答您的问题。您的问题的答案是: 是的,这有所作为 。如果您setVisible
在添加所有组件之前进行调用,则在某些情况下,它
可能 适用于某些程序,某些PC,某些Java版本和某些操作系统,但是您 始终 必须期望它可能无法按预期方式工作某些情况下。
您可以在stackoverflow和其他地方找到许多相关问题。这些问题的通常症状是某些组件无法正确显示,然后在调整窗口大小时突然出现。(调整窗口大小基本上会触发布局和重新绘制)。
当您违反Swing的线程规则时,意外行为的可能性会增加。而且,从某种意义上讲,您确实违反了Swing的线程规则:您应该始终在事件调度线程上创建GUI!
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class SomeSwingGUI
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
// This method may (and will) only be called
// on the Event Dispatch Thread
private static void createAndShowGUI()
{
JFrame f = new JFrame();
// Add your components here
f.setVisible(true); // Do this last
}
}
顺便提一下:Timothy Truckle在评论中指出,您不应setVisible
从构造函数中调用它。这是真的。更重要的是:您通常 不
应该直接创建that的类extends JFrame
。(在一些(罕见!)的情况下,这是合适的,但总的指导原则应该是 不能 延长JFrame
)
我遇到的问题是,当我试图保持屏幕上的第一个函数(StartUpScr)小部件3秒钟使用time.sleep(3)删除所有它的小部件放在屏幕上,然后继续放置下一个函数(MenuScr)小部件。我已经成功地使用销毁()删除第一个小部件,并用第二个小部件替换它们,但由于某种原因,当输入time.sleep(3)在函数和主程序的任何地方,而不是第一个小部件停留3秒钟然后被替换,它会延迟程序的开始,产生一个
问题内容: 当我试图在React版本15.2.0中使用这两个函数时,我在代码中发现了一个问题,尽管如此,我找到了一种解决方法,但是我想知道是否有更好的解决方案。 因此,每当我尝试运行index.html文件时,都不会显示任何内容,但是控制台会出现第一个错误: React.render不是function 。我发现发生这种情况是因为新版本的React需要使用react-dom,即 现在问题已解决,但
函数名称:获取音频播放状态 函数功能: 获取音频是否在播放 函数方法 flag = media.isPlaying() 返回值 类型 说明 flag boolean true - 正在播放音频,false - 未播放 函数用例 media.playAudio("/mnt/sdcard/LuaBox/Projects/1/1.mp3",5,true) flag = media.isPlaying()
问题内容: 我在观看NodeJS Interactive谈话时,那个家伙在说匿名函数的性能很差,原因之一是,如果它们没有名称,VM便无法根据使用频率来优化该函数,因为它没有名字。 因此,如果一个具有名称的函数被调用 可以优化为以下功能: 由于它是匿名的,无名的,因此不会进行优化。 所以我想知道箭头函数是否会做同样的事情,因为我认为您不能命名箭头函数。 将 被优化? 编辑:寻找该人提及此话题的谈话链
问题内容: startsWith(‘abc’, ‘a’) [1] TRUE > startsWith(‘abc’, ‘c’) [1] FALSE 问题答案: 不是那种内在的。 选项包括和。
检查给定的参数是否是一个函数。 使用 typeof 来检查一个值是否为一个函数。 const isFunction = val => typeof val === 'function'; isFunction('x'); // false isFunction(x => x); // true