我的自定义JDialog显示为最小化,JScrollPane的滚动消失

时间:2013-03-23 13:44:20

标签: java image swing jscrollpane jdialog

我创建了一个基本的秋千程序,在通过JDialog选择后,在JFileChooser框中显示图像。我在对话框中使用了JScrollPane,并在窗格内使用JLabel作为图标添加了图像。

以下是我用来构建对话框及其内容的代码,这些对象已经通过简单的新调用初始化:

    jDialog1.setTitle("Image");
    jDialog1.setModal(true);

    jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jScrollPane2.setViewportView(jLabel1);

Netbeans已被用于构建GUI。

以下是我用来加载和显示图像的代码:

    int rval = jFileChooser1.showDialog(this, "Show");
    File f = jFileChooser1.getSelectedFile();
    jDialog1.setTitle(jDialog1.getTitle() + " : " + f.getName());
    try {
        BufferedImage bf = ImageIO.read(f);
        jLabel1.setIcon(new ImageIcon(bf));
    }
    catch (IOException ioe) {
    }
    jDialog1.setLocationRelativeTo(null);
    jDialog1.setVisible(true);
    jDialog1.pack();

虽然图像已加载并显示,但问题是

  • 我的对话框在左上角以最小化的形式出现,我必须拖动它的角来查看图像。包括相同的图像。

    enter image description here

  • 滚动窗格的水平滚动在对话框完全展开并且图像完全显示之前很久就会消失。虽然垂直滚动条动作很好。

我已尝试设置JDialogJLabel的尺寸和首选尺寸,但问题仍然存在。

提前Thanx!

注意:水平滚动条问题是通过在对话框上使用pack()方法解决的,但最小化的对话框仍然存在。此外,对话框现在也出现在屏幕的中央。

1 个答案:

答案 0 :(得分:3)

方法调用的顺序对模态对话框很重要,你必须在使对话框可见之前调用包(因为否则在关闭对话框之前不会执行包):

dialog.pack();
// Edit: manually double its size:
dialog.setSize(dialog.getPreferredSize().width * 2, dialog.getPreferredSize().height * 2);
dialog.setVisible(true);