- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题是,我有 2 个 Jframe,一个用于控制,一个用于向公众展示内容。我需要显示框架全屏显示以避免公众看到它不需要的东西,我需要控制框架在另一个屏幕上可用以控制显示框架。
这是我的问题,今天,我在 Ubuntu 和双屏模式下以这种方式工作没有问题,但是,在 Windows 7 商业 64 中(还没有尝试其他版本)显示框架实际上是全屏的,但是当我单击显示框(包括控制框)以外的任意位置,显示框自动最小化。我猜这是 Windows 最小化最大化行为的问题,但我真的很想让它工作。我知道一个非常肮脏的解决方法,包括使显示框架与我的屏幕大小相同,并将显示框架定位在合适的坐标上。
这是我所做的示例代码。
要全屏显示显示框,请聚焦控制框并按 F11 键。或使用菜单(法语)
GameFrame.java 相当于显示帧
package ihm;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class GameFrame extends javax.swing.JFrame {
public GameFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
mainPanel = new javax.swing.JTabbedPane();
gamePanel = new javax.swing.JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
if(backgroundImage != null){
g.drawImage(backgroundImage, 0, 0, this.getWidth(),this.getHeight(),null);
}
}
};
votePanel = new javax.swing.JPanel();
countdownPanel = new javax.swing.JPanel();
bienvenuePanel = new javax.swing.JPanel();
adsPanel = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("ImproAffichage");
setAlwaysOnTop(true);
setBackground(new java.awt.Color(255, 179, 0));
setForeground(java.awt.Color.white);
setUndecorated(true);
getContentPane().setLayout(new java.awt.GridLayout(1, 1));
mainPanel.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
gamePanel.setBackground(new java.awt.Color(255, 168, 0));
gamePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(40, 40, 40, 40));
gamePanel.setMinimumSize(new java.awt.Dimension(200, 200));
gamePanel.setLayout(new java.awt.GridLayout(2, 2, 70, 70));
mainPanel.addTab("score", gamePanel);
votePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
votePanel.setLayout(new java.awt.GridLayout(1, 0));
mainPanel.addTab("vote", votePanel);
countdownPanel.setLayout(new java.awt.GridLayout(1, 0));
mainPanel.addTab("decompte", countdownPanel);
bienvenuePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
bienvenuePanel.setLayout(new java.awt.GridLayout(1, 0));
mainPanel.addTab("Bienvenue", bienvenuePanel);
adsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
adsPanel.setLayout(new java.awt.GridLayout(1, 0));
mainPanel.addTab("publicité", adsPanel);
getContentPane().add(mainPanel);
mainPanel.setUI(new BasicTabbedPaneUI() {
protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) {
return 0;
}
});
pack();
}
public static void main(String args[]) {
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new GameFrame().setVisible(true);
}
});
}
private static GameFrame instance;
private Image backgroundImage;
private Image decompteImage;
private Image bienvenueImage;
// Variables declaration - do not modify
private javax.swing.JPanel adsPanel;
private javax.swing.JPanel bienvenuePanel;
private javax.swing.JPanel countdownPanel;
private javax.swing.JPanel gamePanel;
private javax.swing.JTabbedPane mainPanel;
private javax.swing.JPanel votePanel;
// End of variables declaration
public static GameFrame getInstance() {
if (instance == null) {
instance = new GameFrame();
}
return instance;
}
public void refresh() {
this.validate();
this.repaint();
this.pack();
}
}
ControlFrame.java相当于控制框架
package ihm;
import java.awt.Dimension;
import java.awt.GraphicsDevice;
public class ControlFrame extends javax.swing.JFrame {
public static ControlFrame getInstance() {
if (instance == null) {
instance = new ControlFrame();
}
return instance;
}
private ControlFrame() {
this.gameFrame = GameFrame.getInstance();
this.gameFrame.setBounds(100, 100, 400, 300);
this.gameFrame.pack();
this.gameFrame.setVisible(true);
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
transitionPanel = new javax.swing.JPanel();
jbBienvenue = new javax.swing.JButton();
jbScore = new javax.swing.JButton();
jbVote = new javax.swing.JButton();
jbDecompte = new javax.swing.JButton();
jbPublicite = new javax.swing.JButton();
jpPlayerControl = new javax.swing.JPanel();
jMenuBar1 = new javax.swing.JMenuBar();
mainMenu = new javax.swing.JMenu();
jmScore = new javax.swing.JMenu();
jmiAddTeam = new javax.swing.JMenuItem();
jmiFullscreen = new javax.swing.JMenuItem();
jmiBackground = new javax.swing.JMenuItem();
jMenuItem1 = new javax.swing.JMenuItem();
jmiPointPath = new javax.swing.JMenuItem();
jmOtherImage = new javax.swing.JMenu();
jmiVote = new javax.swing.JMenuItem();
jmiDecompte = new javax.swing.JMenuItem();
jmiBienvenue = new javax.swing.JMenuItem();
jmiAds = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("ImproContro");
setAlwaysOnTop(true);
setBounds(new java.awt.Rectangle(0, 0, 200, 300));
setForeground(java.awt.Color.white);
setPreferredSize(new java.awt.Dimension(400, 500));
setResizable(false);
getContentPane().setLayout(new java.awt.BorderLayout(25, 25));
transitionPanel.setLayout(new java.awt.GridLayout(1, 6));
jbBienvenue.setText("Bienvenue");
transitionPanel.add(jbBienvenue);
jbScore.setText("Score");
transitionPanel.add(jbScore);
jbVote.setText("Aux votes");
transitionPanel.add(jbVote);
jbDecompte.setText("Decompte");
transitionPanel.add(jbDecompte);
jbPublicite.setText("Publicité");
transitionPanel.add(jbPublicite);
getContentPane().add(transitionPanel, java.awt.BorderLayout.PAGE_START);
jpPlayerControl.setBackground(new java.awt.Color(255, 220, 0));
jpPlayerControl.setLayout(new java.awt.GridLayout(2, 2, 10, 10));
getContentPane().add(jpPlayerControl, java.awt.BorderLayout.CENTER);
mainMenu.setText("File");
jMenuBar1.add(mainMenu);
jmScore.setText("Score");
jmiAddTeam.setText("ajouter equipe");
jmScore.add(jmiAddTeam);
jmiFullscreen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0));
jmiFullscreen.setText("Plein Ecran");
jmScore.add(jmiFullscreen);
jmiBackground.setText("image \"fond score\"");
jmScore.add(jmiBackground);
jMenuItem1.setText("couleur \"fond score\"");
jmScore.add(jMenuItem1);
jmiPointPath.setText("Icone de point");
jmScore.add(jmiPointPath);
jMenuBar1.add(jmScore);
jmOtherImage.setText("Autre images");
jmiVote.setText("image \"aux votes\"");
jmOtherImage.add(jmiVote);
jmiDecompte.setText("image \"fond Decompte\"");
jmOtherImage.add(jmiDecompte);
jmiBienvenue.setText("image \"Bienvenue\"");
jmOtherImage.add(jmiBienvenue);
jmiAds.setText("Ajouter image annonce");
jmOtherImage.add(jmiAds);
jMenuBar1.add(jmOtherImage);
setJMenuBar(jMenuBar1);
jmiFullscreen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0));
jmiFullscreen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jmiFullscreenActionPerformed(evt);
}
});
pack();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
/*
* * Create and display the form
*/ java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
ControlFrame.getInstance().setVisible(true);
}
});
}
private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) {
GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice();
if (gd.getFullScreenWindow() != null) {
gd.setFullScreenWindow(null);
this.gameFrame.setResizable(true);
this.gameFrame.setPreferredSize(new Dimension(400, 300));
} else {
this.gameFrame.setResizable(false);
this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize()));
this.gameFrame.enableInputMethods(false);
gd.setFullScreenWindow(this.gameFrame);
}
refresh();
}
private static ControlFrame instance;
private GameFrame gameFrame;
// Variables declaration - do not modify
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JButton jbBienvenue;
private javax.swing.JButton jbDecompte;
private javax.swing.JButton jbPublicite;
private javax.swing.JButton jbScore;
private javax.swing.JButton jbVote;
private javax.swing.JMenu jmOtherImage;
private javax.swing.JMenu jmScore;
private javax.swing.JMenuItem jmiAddTeam;
private javax.swing.JMenuItem jmiAds;
private javax.swing.JMenuItem jmiBackground;
private javax.swing.JMenuItem jmiBienvenue;
private javax.swing.JMenuItem jmiDecompte;
private javax.swing.JMenuItem jmiFullscreen;
private javax.swing.JMenuItem jmiPointPath;
private javax.swing.JMenuItem jmiVote;
private javax.swing.JPanel jpPlayerControl;
private javax.swing.JMenu mainMenu;
private javax.swing.JPanel transitionPanel;
// End of variables declaration
public void refresh() {
System.out.println("refresh()");
this.gameFrame.refresh();
this.validate();
this.repaint();
}
}
编辑1:
我尝试全屏显示两个窗口,但是当调用文件选择器时,焦点会丢失,因为全屏窗口的行为总是在最前面。
编辑 2:
我还尝试在图标化显示 jframe 上放置一个监听器,但是如果我尝试将状态更改为正常,则显示 jframe 请求焦点,并且我的第二个框架无法使用,因为它失去了焦点
编辑 3:
如果显示框架不是全屏显示,则在单击控制框架时它不会最小化。
最佳答案
所以在这里我自己解决我自己的问题,我最终使用的解决方法,我认为是我能找到的唯一不那么丑陋的解决方法是使用这段代码
private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) {
GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice();
if (!this.gameFrame.isResizable() ) {
//gd.setFullScreenWindow(null);
this.gameFrame.setResizable(true);
this.gameFrame.setPreferredSize(new Dimension(400, 300));
} else {
this.gameFrame.setResizable(false);
this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize()));
this.gameFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
}
refresh();
}
而不是我原来的例子中的这个
private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) {
GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice();
if (gd.getFullScreenWindow() != null) {
gd.setFullScreenWindow(null);
this.gameFrame.setResizable(true);
this.gameFrame.setPreferredSize(new Dimension(400, 300));
} else {
this.gameFrame.setResizable(false);
this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize()));
this.gameFrame.enableInputMethods(false);
gd.setFullScreenWindow(this.gameFrame);
}
refresh();
}
所以最后我没有使用 java 全屏功能,我只是使用我的 jframe 的一些属性让它看起来像一个全屏框架。
希望对大家有所帮助!!祝你有美好的一天
关于带有双显示器的 Java 全屏 jframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179297/
我正在尝试使用 Qt 制作游戏,因为它太棒了 ;) 而且您可以免费获得所需的所有东西。唯一的问题是更改系统分辨率和设置 QWidget(或 QGLWidget)“真正的”全屏。 你们中有人成功地做到了
有没有办法以全屏模式(没有工具栏、导航)启动 gwt-app? 我只找到了打开新窗口的提示: Window.open("SOMEURL","SOMETITLE", "fullscreen=yes
if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscr
我想解释一下我现在在做什么。我开发了一个 aar(sdk) 并且运行良好。但是,我希望我的 sdk 在被调用时占据全屏,即使调用者有一个工具栏。我尝试了此链接中的示例 [ How to set act
我是 Blazor 的新手,我正在尝试了解如何以全屏模式打开浏览器。我知道我可以执行 Javascript 中断并运行 Javascript,但这违背了 Blazor 的目的。 如何在 Blazor
我正在创建一个全屏应用程序,并且想知道是否有某种方法可以使 NSAlert 位于我创建的 CGDisplayCapture 之上。现在,NSAlert 显示在显示捕获后面。我的主窗口显示得很好(在使用
有人可以解释一下下面的代码是如何工作的吗? 元素指的是视频,全屏指的是页面上的链接。 我无法理解 if 语句 var element = document.getElementById('elemen
我想要实现的是类似于 Instagram 应用内网络浏览器,在您点击广告时使用: 我所做的是,我使用了 WebView bottomSheetDialogFragment,并覆盖了 onCreateD
第二个 ViewController 的顶部有这个空间,它几乎在手机上显示为可关闭的弹出窗口。如何使全屏显示(删除橙色箭头指向的空间)? 最佳答案 这是 iOS 13 的一项更改。用户将开始期望能够滑
我正在尝试在全屏模式下使用 emacs 并使用合适的字体。我有一台运行 Ubuntu 的基于 nvidia 的笔记本电脑。首次加载时,字体很大,认为是 16pt 字体。我使用菜单选项设置了合适的字体(
我有一个 GridView,我使用 BaseAdapter 来调整我的 GridView 中的图像和文本。我有一个问题,当我运行我的应用程序时,我的“GridView”有左、右、上和下边距。我不需要这
是否可以在全屏模式下使用 Android Studio 例如只有我们编码的那个字段应该显示在整个屏幕上。 像这样: 最佳答案 您可以使用“无干扰模式”: 关于全屏 Android Studio,我们在
我正在制作一个应用程序,当手机处于纵向时,我需要 fragment 显示菜单栏(带有设置快捷方式等),但当它处于横向时,我需要全屏。 因此,我有一个管理 2 个 fragment 的 Activity
我想知道是否可以在没有标签栏和导航栏的情况下全屏推送 NavigationController 的 ViewController。我的问题如下: 我的应用在 TabBarController 中嵌入了
我制作了一个1920 * 1048的flash(16:9的屏幕),并将其嵌入到html中喜欢: 问题是: 在 4:3 屏幕中,flash 的宽度为 100%,但顶部和底部有白色填充。看来闪光灯
我想制作一个同时包含多个文本的HTML5视频。 文本应该以不同的css布局(文本颜色、字体、阴影)显示在视频的不同位置(同时) 我试过这个教程http://www.artandlogic.com/bl
需要一些帮助。 我需要水平滑动一次长图像,然后再水平滑动回来...我在这里学习了一个教程 https://css-tricks.com/creating-a-css-sliding-backgroun
我正在制作一个简单的登录页面,并试图将以下图像作为背景全屏:image 我的 CSS 目前看起来像这样: body { background-image: url('/images/bg.jp
我想用透明色覆盖我的背景图片,但颜色没有覆盖背景图片。 这是我的演示: http://jsfiddle.net/farna/73kx2/ CSS 代码: .overlay{ backgroun
有什么方法可以隐藏状态栏并保持操作栏可见吗? 最佳答案 是的,有。您应该在 Activity 的 onCreate 方法中设置 FLAG_FULLSCREEN。 @Override public vo
我是一名优秀的程序员,十分优秀!