微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JOptionPane - 创建可调整大小的文本和 GUI

如何解决JOptionPane - 创建可调整大小的文本和 GUI

为了增加文本的大小,我添加了这行代码

UIManager.put("OptionPane.messageFont",new FontUIResource(new Font("Serif",Font.PLAIN,25))); 

但是当我将文本的大小设置得太大时,我无法调整对话框的大小。当我在屏幕上有太多文本时,这就会成为一个问题,导致我的 GUI 在垂直方向上比我的屏幕大,这最终使我无法按下顶部的“x”按钮,或者我按下的任何按钮有在屏幕的底部。我希望能够拖动来调整我的 GUI 的大小,以及里面文本的大小。这是可能的吗?如果没有,我如何创建可调整大小的 GUI?

我的另一个问题是如何让 JOptionPane 全屏显示

解决方法

也许通过在显示对话框之前添加一个侦听器,它会在添加到对话框以及对话框可见时被调用。 借助 Windows 类

self.solve()

如果你想使用 None 方法,我们需要将它类型转换为 dialog

self.solve()

这是一种可以将组件包装在滚动窗格中的方法

None
,

人们往往会忘记 JOptionPane 不仅仅是显示文本。将组件作为 message 参数传递将直接在结果对话框中显示该组件。

下面是一个稍微简化的例子。它从嵌入的文本文件(自带)加载文本,在本例中,该文件是从 https://imsdb.com/scripts/Star-Wars-A-New-Hope.html 复制的 New Hope 脚本并显示它。

Simple example

import java.awt.EventQueue;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JTextArea ta = new JTextArea(25,50);
                ta.setFont(new Font("Serif",Font.PLAIN,25));

                String text = "";
                try (BufferedReader br = new BufferedReader(new InputStreamReader(Test.class.getResourceAsStream("Script.txt")))) {
                    String line = null;
                    StringBuilder buffer = new StringBuilder(1024);
                    while ((line = br.readLine()) != null) {
                        buffer.append(line).append("\n");
                    }
                    text = buffer.toString();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                ta.setText(text);
                ta.setCaretPosition(0);

                JOptionPane.showMessageDialog(null,new JScrollPane(ta));
            }
        });
    }
}

此处要注意的重要部分是行 JTextArea ta = new JTextArea(25,50);。这将设置文本区域的“首选滚动大小”,JScrollPane 将使用它来确定它需要多少空间。

尝试从 JTextArea 构造函数中删除参数并查看结果以进行比较。

现在,将会有一些限制,您将必须找到方法来平衡您的愿望与您拥有的硬件(屏幕)不动产的物理可能性。

您也可以使用 JFrame 执行相同的操作,因此将调用 JOptionPane 替换为类似...

JFrame frame = new JFrame();
frame.add(new JScrollPane(ta));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);

会给你一个类似的结果。在这两种情况下,窗口都可以调整大小。

您可能会在计算目标屏幕的可用可视空间和所需的窗口大小时遇到​​很多麻烦,并进行大量捏造,但在大多数情况下,您只需要考虑一下自己的情况在您面临的一些限制范围内做和工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。