当前位置: 首页 > 知识库问答 >
问题:

为什么我的java gui在第一次移动时会“跳转”?

习旻
2023-03-14

我有一个简单的java gui(代码如下),由于某种原因,当显示时,当我第一次尝试移动或调整它的大小时,它会“跳”回原来的位置。所以基本上,我必须移动gui两次才能使它移动一次,因为当我第一次释放鼠标时,它就会弹回原来的位置。

import javax.swing.*;

public class JFrameTester {

  public static void main(String[] args) {

    JFrame f = new JFrame("A JFrame");
    f.setSize(250, 250);
    f.setLocation(300,200);
    f.getContentPane().add(new JTextArea(10, 40));    
    //f.pack();    
    f.setVisible(true);
    //f.validate();
  }

}

我正在使用Java1.6运行GNU Linux。我正在将显示导出回我的Windows机器,并想知道它是否与X11转发有关,因为当我在Windows中运行gui时,它不显示这种行为。但是,当我在Fedora Linux box(带有Java1.7)上运行这个gui时,它根本不显示这种行为--无论是否导出显示。

共有1个答案

充普松
2023-03-14

有几个问题是显而易见的:

>

  • 仅在事件调度线程上构造和操作Swing GUI对象。如果不这样做,就会产生一种竞争条件,这种竞争条件可能很模糊,直到不同的平台或网络延迟将其暴露出来。

    使用pack(),这将“使此窗口的大小适合其子组件的首选大小和布局”。如果不这样做,则会在移动或调整大小时验证无效的容器。当过早可见的组件移动到定义的位置时,它们就会出现“跳跃”。

    使setVisible()成为影响初始外观的最后一个操作。

    下面的示例结合了这些建议:

    import java.awt.EventQueue;
    import javax.swing.*;
    
    public class JFrameTester {
    
        public static void main(String[] args) {
    
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    JFrame f = new JFrame("A JFrame");
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.add(new JScrollPane(new JTextArea(10, 40)));
                    f.pack();
                    f.setLocationByPlatform(true);
                    f.setVisible(true);
                }
            });
        }
    }
    

  •  类似资料:
    • 我们正在使用jOOQ与包含以下表的MySQL数据库进行对话: 我们已经启用了对JSR-310类型的支持,所以我们在Java/Kotlin端使用来映射它。 注意选择如何在上进行筛选,但是结果表显示。 这是一个测试,在我的本地机器(UTC+10)上运行,对本地运行的标准Docker映像进行测试。 尽管使用了,但我认为我们遇到了一些时区问题,但是我不能通过直接讨论JDBC来重现这个问题。我尝试在其他测试

    • 我已经下载了包含eclipse Juno的adt包,但是当我解压缩它时,不断得到一个错误“错误已经发生,请查看日志文件”请帮助我解决这个问题。 日志文件: !条目org.eclipse.osgi 4 0 202 1-05-25 10:58:03.222!消息应用程序错误!堆栈1 java.lang.IllegalStateException:无法获取应用程序服务。确保解析并启动了org.eclip

    • 问题内容: 我有一个简单的AJAX表单,该表单可以在提交时正常运行。但是,如果我随后将新数据输入相同的表单(而不刷新页面),则它将提交两次表单。如果我第三次这样做,那么它将第三次提交表单,依此类推。为什么这样做呢?这是我的代码: 问题答案: 即使我在开发AJAX登录表单时也遇到了同样的问题。搜寻了几个小时后,我找到了解决方案。希望这对您有所帮助。 基本上,您必须在ajax请求完成后 取消绑定 表单

    • 我在Python3.3中有一个Tkinter GUI,带有一个进度条和一个启动另一个线程的按钮。此线程在10秒内填充进度条,并在此期间在控制台上打印0到99之间的数字 只要我不移动或调整GUI窗口的大小,它就可以正常工作。如果我删除标记行为了使工作线程不接触进度条,因此根本不会影响GUI,即使我正在操作窗口,它也会在控制台上连续打印数字。 为什么会发生这种情况?通常会采取什么措施来避免GUI操作导

    • null 在上面,“开始”的意思是做 任一 React-Native Run-Android 光盘android&&./Gradlew Assemblerelease 光盘.. react-native run-android--variant=release null ... ... package.json... Android/app/build.gradle

    • 考虑这个程序本质上创建了<代码> STD::线程< /代码>,调用函数<代码>函数()/代码>以<代码> ARG作为参数: 我的输出是 据我所知,在线程对象中内部复制,然后作为右值(移动)传递给。所以,我期待一个副本建设和一个移动建设。 为什么会有第二步建设?