JDialog位于屏幕中心而不是JApplet的所需中心

时间:2016-02-03 13:12:33

标签: java swing applet jdialog japplet

在我的Java小程序中,我有一些带有几个radioButtons的JDialog。

问题是此applet的尺寸为700x300,而JDialog则显示在屏幕中央。我希望这个JDialog出现在JApplet布局的中心。我的构造函数调用如下所示:

final JDialog dialog = new JDialog(
        SwingUtilities.windowForComponent(GUIComponentContainer.getInstance().getDocumentTable()),
        I18nCommonsImpl.constants.selectCertificate(), ModalityType.APPLICATION_MODAL);

此方法:

GUIComponentContainer.getInstance().getDocumentTable()

返回JTable组件,它是我的JApplet的子组件。

我还使用了JDialog“setLocationRelativeTo”方法:

dialog.setLocationRelativeTo(GUIComponentContainer.getInstance().getApplet());

这些似乎都不起作用。有没有其他方法可以实现我的目标? 我在SO上搜索了类似的问题,但没有看到任何有效的解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:2)

让applet的窗口适合我,至少在Eclipse中启动applet时。例如:

import java.awt.Dimension;
import java.awt.Window;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class AppletCentering extends JApplet {
    @Override
    public void init() {
        final JPanel panel = new JPanel();
        panel.add(new JButton(new AbstractAction("Press Me") {

            @Override
            public void actionPerformed(ActionEvent e) {
                Window win = SwingUtilities.getWindowAncestor(panel);
                System.out.println("win class: " + win.getClass().getCanonicalName());
                JDialog dialog = new JDialog(win, "My Dialog", ModalityType.APPLICATION_MODAL);
                dialog.add(Box.createRigidArea(new Dimension(200, 200)));
                dialog.pack();
                dialog.setLocationRelativeTo(win);
                dialog.setVisible(true);                    
            }
        }));

        add(panel);
    }
}

但是说了这句话之后,你的问题就引出了一个问题:你为什么要为applet编码?这些已经多年没有受到青睐,最近又失去了甲骨文的支持,后者决定最终放弃applet浏览器支持。