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

如何更改JOptionPane.showOptionDialog的大小和位置()

平羽
2023-03-14

好的,事情是这样的。目前,我正在使用这个:

 String[] choices = {"Rock", "Paper", "Scissors"};
 String input = (String) JOptionPane.showInputDialog(null, "Please, make your choice", "Rock Paper Scissors!", JOptionPane.QUESTION_MESSAGE, null, choices, choices[0]); 

这正是我所需要的。它创建一个下拉菜单,允许用户选择石头、布或剪刀,然后将其输出到一个字符串中。问题是,它弹出的窗口真的很小,而且在屏幕的中央。我想将它重新调整为970像素乘以300像素,并出现在950像素和0像素的位置。

现在,在你说之前,我已经尝试过使用JFrame来实现这个功能,因为我知道如何获得它的大小和位置。然而,我无法让ActionListener按我希望的方式运行。

public static void main(String args[]) throws IOException
{
    JFrame hi = new JFrame("Hi");
    hi.setSize(970, 300);
    hi.setLocation(950, 0);
    System.out.println("Hi");
    Picture Hi = new Picture("c:/The Game/Cool.png");
    Hi.display();

    JButton B = new JButton("Hey There!");
    hi.add(B);

    int c = Output(hi);
}
public int Output(JFrame b)
{
    int j = 0;
    j = //CODE NEEDED HERE
    return j;
}
@Override
public void actionPerformed(ActionEvent arg0) {


}

因此,这样做的问题是,我需要JFrame在“此处需要代码”部分中弹出,然后在单击按钮时返回某个值,然后关闭JFrame。但是,JFrame 不会等待输出() 函数,它会立即返回 j,该值等于 0。相反,它只是执行操作执行函数中的任何内容。

因此,我正在寻求解决其中任何一个问题的方法。如何重新调整JOptionsPane的大小。showInputDialog()或获取JFrame以在单击按钮时返回int值。

很抱歉,如果解释得很糟糕,我对JOptionPane和JFrames真的很陌生。

共有1个答案

聂炜
2023-03-14

JOptionPane是非常可配置的,它也很好地自包含,吸收了大量重复的、沸腾的板代码并将其隐藏在一个易于使用的包中。

但这并不意味着您必须这样使用它,您可以简单地创建JOptionPane的实例,它只是JComponent

困难在于将所有的功能连接起来,这样你就可以对按钮做出响应。

请注意,您的示例将对话框放在我的任务栏下(是的,我的对话框位于屏幕顶部),因此我可以告诉您,作为用户,这会让我烦恼!

所以,这个例子基本上把所有的锅炉板代码都封装到一个简单的类/方法中,这样就很容易反复提示用户相同的问题。。。

import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.OK_CANCEL_OPTION;
import static javax.swing.JOptionPane.UNINITIALIZED_VALUE;
import static javax.swing.JOptionPane.VALUE_PROPERTY;
import javax.swing.border.EmptyBorder;

public class Test {

    public static void main(String[] args) {
        String pick = Picker.pick();
        System.out.println("You picked " + pick);
        System.exit(0);
    }

    public static class Picker {

        public static String pick() {
            String[] choices = {"Rock", "Paper", "Scissors"};

            JOptionPane pane = new JOptionPane("Please, make your choice", JOptionPane.QUESTION_MESSAGE,
                    OK_CANCEL_OPTION, null, null, null);
            pane.setWantsInput(true);
            pane.setSelectionValues(choices);
            pane.setInitialSelectionValue(choices[0]);

            JDialog dialog = new JDialog();
            dialog.setModal(true);

            PropertyChangeListener listener = new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent event) {
                    // Let the defaultCloseOperation handle the closing
                    // if the user closed the window without selecting a button
                    // (newValue = null in that case).  Otherwise, close the dialog.
                    if (dialog.isVisible()
                            && (event.getPropertyName().equals(VALUE_PROPERTY))
                            && event.getNewValue() != null
                            && event.getNewValue() != JOptionPane.UNINITIALIZED_VALUE) {
                        dialog.setVisible(false);
                    }
                }
            };

            WindowAdapter adapter = new WindowAdapter() {
                private boolean gotFocus = false;

                public void windowClosing(WindowEvent we) {
                    pane.setValue(null);
                }

                public void windowClosed(WindowEvent e) {
                    dialog.removePropertyChangeListener(listener);
                    dialog.getContentPane().removeAll();
                }

                public void windowGainedFocus(WindowEvent we) {
                    // Once window gets focus, set initial focus
                    if (!gotFocus) {
                        pane.selectInitialValue();
                        gotFocus = true;
                    }
                }
            };
            dialog.addWindowListener(adapter);
            dialog.addWindowFocusListener(adapter);
            dialog.addComponentListener(new ComponentAdapter() {
                public void componentShown(ComponentEvent ce) {
                    // reset value to ensure closing works properly
                    pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
                }
            });

            pane.addPropertyChangeListener(listener);

            dialog.add(pane);
            //dialog.pack();
            //dialog.setLocationRelativeTo(null);
            dialog.setSize(970, 300); // This is bad idea, use an EmptyBorder instead
            dialog.setLocation(950, 0);
            dialog.setVisible(true);

            String pick = null;
            Object value = pane.getInputValue();
            if (value != UNINITIALIZED_VALUE) {
                pick = value.toString();
            }

            return pick;

        }

    }

}

您在使用< code>JFrame时遇到问题的原因是,它并不是为了在显示时阻止代码执行而设计的,而< code>JDialog可以,请参阅如何创建对话框了解更多详细信息

 类似资料:
  • 问题内容: 您可以更改JOptionPane的字体和文本大小吗?我尝试了它,只有当我在那个特定的Java类上“运行文件”时,它才起作用。如果启动整个项目,则不会更改字体。我只想更改一个特定的JOptionPane而不是全部。 这是代码: 问题答案: 真的很简单。JOption窗格不仅接受字符串,还接受组件。因此,您可以创建一个标签集并设置其字体并将其用作消息。 我不明白为什么以前没人回答这个问题

  • 问题内容: 我在启动时修改UIView高度有麻烦。 我必须使用UIView,我希望其中一个是屏幕尺寸* 70,另一个是填补空白。 这是我所拥有的 和 它在运行时对应用程序没有影响。我使用自动版式,但只有边距限制… 我做错了吗? 问题答案: 干得好。这应该工作。

  • 我已经将添加到中(使用),它很大。我能做点什么让它变小吗?

  • 问题内容: 我在(使用)中添加了一个,它很大。有什么办法可以做得更小? 问题答案: 创建时,你有几个影响结果的选项: 接受和。 指定首选和在构造。 适当时显式调用。 覆盖以动态计算大小。 选择将添加到的容器的布局。需要注意的是默认的布局是,而的是。作为一个具体示例,在构造函数中使用首选值,并在容器中同时使用,以允许动态调整大小。

  • 问题内容: 我的MySQL数据库中的BLOB字段有问题-上传大于1MB的文件时出现错误 这是我尝试过的: 在MySQL查询浏览器中,我运行了一个,结果显示为1048576。 然后,我执行查询之后-这让我33554432预期。 但是,当我重新启动MySQL服务器时,它神奇地回到了1048576。在这里我做错了什么? 额外的问题,是否可以压缩BLOB字段? 问题答案: 通过在文件中的或部分下添加单行来

  • 本文向大家介绍如何更改placeholder的字体颜色和大小?相关面试题,主要包含被问及如何更改placeholder的字体颜色和大小?时的应答技巧和注意事项,需要的朋友参考一下