当前位置: 首页 > 面试题库 >

Java Swing:为什么必须调整框架的大小,以便可以显示已添加的组件

洪富
2023-03-14
问题内容

我有一个简单的Swing
GUI。(不仅如此,我编写的所有摆动GUI都如此)。运行它时,它没有显示任何内容,只有空白屏幕,直到我调整了主框架的大小,所以每个组件都重新绘制了一次,然后我才能显示它们。

这是我的简单html" target="_blank">代码:

public static void main(String[] args) {
        JFrame frame = new JFrame("JScroll Pane Test");
        frame.setVisible(true);
        frame.setSize(new Dimension(800, 600));

        JTextArea txtNotes = new JTextArea();
        txtNotes.setText("Hello World");
        JScrollPane scrollPane = new JScrollPane(txtNotes);
        frame.add(scrollPane);
}

所以,我的问题是:当我开始上课时,框架将如何显示我添加的所有组件,而不是在调整框架大小之前。

谢谢 :)


问题答案:
  • 不要添加组件JFrameJFrame是可见的(setVisible(true)

  • 调用setSize()框架而不是调用并不是一种很好的做法pack()(原因是JFrame将其大小调整为适合其子组件的首选大小和布局),然后LayoutManager处理该大小。

  • 使用EDT(事件调度线程)

  • 呼叫JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)由@Gilbert勒布朗(+1给他),否则你说EDT /初始线程将保持活动状态,即使以后JFrame一直 关闭

像这样:

public static void main(String[] args) {
        //Create GUI on EDT Thread
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {

                  JFrame frame = new JFrame("JScroll Pane Test");
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                  JTextArea txtNotes = new JTextArea();
                  txtNotes.setText("Hello World");
                  JScrollPane scrollPane = new JScrollPane(txtNotes);
                  frame.add(scrollPane);//add components

                  frame.pack();
                  frame.setVisible(true);//show (after adding components)
            }
        });
}


 类似资料:
  • 问题内容: 我正在使用一些动态生成的数据输入形式来管理组件。布局大致如下: 我将2个平行组用于水平布局,并将一个顺序组用于垂直布局。在大多数情况下,一切都很好。 我想将标签的最大宽度(只是的实例)限制为父级宽度的。如果将JFrame其设置为固定大小,这将是微不足道的,但是我必须处理它的调整大小。 我正在从接收事件,JFrame但是一旦收到这样的事件,我就该做什么了。 我试过这种方法没有任何运气:

  • 问题内容: 我编写了一个应用程序,该应用程序基于固定像素位置自定义绘制paint()中的所有内容。然后我禁用了调整框架的大小,使其始终可见。 但是,现在我希望能够调整它的大小,但是我不想更改我的绘图代码。我希望我可以在所有绘制代码​​之后抓取Graphics g对象的300x300正方形并将其大小调整为JFrame当前大小,但是我不知道自己在做什么。 这里是示例代码。在此,我希望将100x100正

  • 这是我通过。anddo(print())打印出来的表达式: 只是不幸的是,我的JUnit测试失败了,我不知道为什么。 AssertionError:JSON路径“$.ExternalID”处没有值 只是不幸的是,一个“$[1].ExternalID”对我没有帮助。因此,方法也有,但不能真正处理输出。有人知道我必须如何调整json路径以便测试成功吗?

  • 问题内容: 我们可以在Java中调整数组的大小吗?如果没有,请解释一下: 问题答案: 就我而言,调整数组大小是不可能的。 要了解代码为什么起作用,您需要了解数组是引用类型。持有对实际数组的引用,如下所示: 在这一行: 最终,您对数组对象不做任何事情。您基本上是在说: 嘿。我不希望您再保留 该 参考。放开并保持 该 引用(这是一个长度为2的数组)! “那么长度为1的原始数组对象会发生什么?” 你问。

  • 我有一个,有5列。这些分别是我对列约束的设置。 (固定大小) 整个 基本上是两列形式的布局。我的列 1 和 4(索引 0 和 3)是字段标签,而列 2 和 5 是输入字段(等)。列 3 只是两个表单列之间的固定宽度填充。 我的表单中有一些 - 有些在左列,有些在右列。我已将所有的最大宽度设置为。 加载表单时,布局与我预期的一样(两个输入字段列的宽度相等)。但是,当我单击任何一个<code>组合框<

  • 我想在tkinter中创建由笔记本框架和每个选项卡内的几个框架组成的简单图形用户界面。假设我想在笔记本的每个选项卡内创建两个标记的框架,跨越100%的窗口宽度和50%的窗口高度。 屏幕布局 我将有更多的帧/元素,我想采取窗口宽度/高度的x%。 我读到tkintergui应该自动调整窗口大小时,但我不能让它工作。 如何设置帧以获取100%的窗口宽度和(例如)50%的窗口高度? 如何使框架居中,使其不