gpt4 book ai didi

java - JOptionPane 使用 GraphicsDevice 显示 JFrame 外部

转载 作者:行者123 更新时间:2023-12-02 14:00:59 24 4
gpt4 key购买 nike

package javaapplication1;

import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class JavaApplication1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setTitle("Frame");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
device.setFullScreenWindow(frame);
device.setDisplayMode(new DisplayMode(800, 600, 32, 60));
frame.setVisible(true);

JButton btn = new JButton();
btn.setText("Button");
JPanel panel = new JPanel();

panel.add(btn);
frame.add(panel);

btn.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "JOptionPane");
}
});
}
}

当我单击该按钮时,设置为全屏的应用程序将转到任务栏/最小化,因此我需要先在任务栏中单击它,然后才能看到我触发的 JOptionPane。您认为这有什么问题吗?我希望它能够顺利运行,而不会最小化或进入任务栏。期待您的答复。提前致谢。或者还有其他替代方案吗?

最佳答案

该代码对我有用,尽管您可以尝试此变体并进行 2 处更改。

  1. 它在 EDT 上创建并显示 GUI。
  2. 它使用框架的内容 Pane 作为 JOptionPane 的父级
<小时/>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JavaApplication1 {

public static void main(String[] args) {
Runnable r = new Runnable() {

public void run() {
final JFrame frame = new JFrame();
frame.setTitle("Frame");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
device.setFullScreenWindow(frame);
device.setDisplayMode(new DisplayMode(800, 600, 32, 60));
frame.setVisible(true);

JButton btn = new JButton();
btn.setText("Button");
JPanel panel = new JPanel();

panel.add(btn);
frame.add(panel);

btn.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
//JOptionPane.showMessageDialog(frame, "JOptionPane");
JOptionPane.showMessageDialog(frame.getContentPane(), "JOptionPane");
}
});
}
};
SwingUtilities.invokeLater(r);
}
}

更新

当我将以下行添加到上面看到的源代码的开头时..

System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.vm.version"));

..输出结果如下。

在 1.7 中运行

结果:失败,如问题中所述。

1.7.0_09
23.5-b02

在 1.6 中运行

结果:成功,没有异常现象或行为。

1.6.0
1.6.0-b105

分析

请注意,评论中的其他结果表明该行为在早期 1.6 版本和 1.6.0_25 之间发生了一些变化。这似乎是一个回归错误。 OP 应检查 bug database如果没有任何结果,请提交新报告。

关于java - JOptionPane 使用 GraphicsDevice 显示 JFrame 外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com