Java JDialog的扩展(隐藏?)没有显示在父JFrame前面?
我有一个为游戏制作的应用程序,可以自动更新游戏客户端 一旦按下Launch,它将打开我的下载框(Java JDialog的扩展(隐藏?)没有显示在父JFrame前面?,java,swing,jframe,jdialog,Java,Swing,Jframe,Jdialog,我有一个为游戏制作的应用程序,可以自动更新游戏客户端 一旦按下Launch,它将打开我的下载框(extensedjdialog),如下所示: 如果您单击任务栏中应用程序的图标(可能是Windows 8的问题?),它会像往常一样最小化应用程序。但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面。看起来是这样的: 这是我的JDialog扩展代码。为它的凌乱预先道歉 public class DownloadFrame extends JDialog implements Run
extensedjdialog
),如下所示:
如果您单击任务栏中应用程序的图标(可能是Windows 8的问题?),它会像往常一样最小化应用程序。但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面。看起来是这样的:
这是我的JDialog扩展代码。为它的凌乱预先道歉
public class DownloadFrame extends JDialog implements Runnable {
private static final long serialVersionUID = -8764984599528942303L;
private Background frame;
private ImageIcon[] gifs;
private JLabel spinner;
public DownloadFrame() {
super(Loader.application, false);
setLayout(null);
setUndecorated(true);
setAutoRequestFocus(true);
new Thread(this).start();
generateBackground();
generateButton();
generateGif();
}
private void generateBackground() {
frame = new Background("sub_background.png");
setSize(frame.getWidth(), frame.getHeight());
setBackground(new Color(1.0f, 1.0f, 1.0f, 0.0f));
setLocationRelativeTo(null);
setLocation(this.getX(), this.getY() + 5);
setLayout(null);
setContentPane(frame);
}
private void generateGif() {
gifs = Utils.generateGifImages();
spinner = new JLabel(gifs[0]);
spinner.setBounds(70, 30, gifs[0].getIconWidth(), gifs[0].getIconHeight());
add(spinner);
}
private HoverableButton cancel;
public HoverableButton getCancelButton() {
return cancel;
}
private void generateButton() {
cancel = new HoverableButton(Settings.CANCEL_BUTTON, 75, 145);
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
/*
* TODO -
* stop the download in progress
*/
for (HoverableButton button : Loader.application.getPrimaryButtons()) {
button.setActive(true);
button.setVisible(true);
}
dispose();
}
});
add(cancel);
}
private int cycleCount;
private void cycleGif() {
if (spinner == null) {
return;
}
cycleCount++;
if (cycleCount > 7) {
cycleCount = 0;
}
spinner.setIcon(gifs[cycleCount]);
}
@Override
public void run() {
while (true) {
cycleGif();
try {
Thread.sleep(100L);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
如果需要的话,这是我的用法。我敢肯定,大部分内容都可以忽略,只是在下载过程中隐藏四个按钮而已
((HoverableButton) components[2]).addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
HoverableButton source = (HoverableButton) components[2];
if (source.isActive()) {
try {
Thread.sleep(500L);
} catch (Exception ex) {
ex.printStackTrace();
}
if (panel == null) {
panel = new DownloadFrame();
panel.setVisible(true);
} else {
panel.setVisible(true);
panel.getCancelButton().removeHighlight();
}
for (HoverableButton button : getPrimaryButtons()) {
button.setActive(false);
button.setVisible(false);
button.removeHighlight();
}
/*
* TODO -
* handle checking for updates / downloading updates
*/
}
}
});
但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面
对。创建JDialog时,需要在构造函数中指定对话框的“所有者”JFrame
因此,在创建对话框之前,必须创建并使JFrame可见
但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面
对。创建JDialog时,需要在构造函数中指定对话框的“所有者”JFrame
因此,在创建对话框之前,必须创建并使JFrame可见
但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面
对。创建JDialog时,需要在构造函数中指定对话框的“所有者”JFrame
因此,在创建对话框之前,必须创建并使JFrame可见
但是,当您再次最大化应用程序时,我假设JDialog将隐藏在父级后面
对。创建JDialog时,需要在构造函数中指定对话框的“所有者”JFrame
因此,在创建对话框之前,必须创建并使JFrame可见。创建框架,并通过super(Loader.application,false)将其设置为所有者。构造函数将应用程序框架指定为父框架,布尔值用于使对话框成为模态(我相信)。如果这不起作用,让我知道!如果对话框未显示在框架上方,则说明您做错了。创建一个简单的例子来证明我刚才解释的概念。也就是说,使用框架作为所有者创建一个JFrame和一个JDialog,并使这两个窗口都可见。然后最小化框架并单击任务栏上的框架图标。这种类型的代码称为a,用于演示问题。一旦你向自己证明了这个概念是可行的,你就会明白为什么你的代码是不同的。如果你不能让这个概念发挥作用,那么你可以在论坛上发布一些小代码。框架被创建,并通过super(Loader.application,false)设置为所有者。构造函数将应用程序框架指定为父框架,布尔值用于使对话框成为模态(我相信)。如果这不起作用,让我知道!如果对话框未显示在框架上方,则说明您做错了。创建一个简单的例子来证明我刚才解释的概念。也就是说,使用框架作为所有者创建一个JFrame和一个JDialog,并使这两个窗口都可见。然后最小化框架并单击任务栏上的框架图标。这种类型的代码称为a,用于演示问题。一旦你向自己证明了这个概念是可行的,你就会明白为什么你的代码是不同的。如果你不能让这个概念发挥作用,那么你可以在论坛上发布一些小代码。框架被创建,并通过super(Loader.application,false)设置为所有者。构造函数将应用程序框架指定为父框架,布尔值用于使对话框成为模态(我相信)。如果这不起作用,让我知道!如果对话框未显示在框架上方,则说明您做错了。创建一个简单的例子来证明我刚才解释的概念。也就是说,使用框架作为所有者创建一个JFrame和一个JDialog,并使这两个窗口都可见。然后最小化框架并单击任务栏上的框架图标。这种类型的代码称为a,用于演示问题。一旦你向自己证明了这个概念是可行的,你就会明白为什么你的代码是不同的。如果你不能让这个概念发挥作用,那么你可以在论坛上发布一些小代码。框架被创建,并通过super(Loader.application,false)设置为所有者。构造函数将应用程序框架指定为父框架,布尔值用于使对话框成为模态(我相信)。如果这不起作用,让我知道!如果对话框未显示在框架上方,则说明您做错了。创建一个简单的例子来证明我刚才解释的概念。也就是说,使用框架作为所有者创建一个JFrame和一个JDialog,并使这两个窗口都可见。然后最小化框架并单击任务栏上的框架图标。这种类型的代码称为a,用于演示问题。一旦你向自己证明了这个概念是可行的,你就会明白为什么你的代码是不同的。如果你不能让这个概念发挥作用,那么你可以在论坛上发布一些小代码。