【Gloomyfish】Java Swing 实现实际大小到全屏切换

简介: 【Gloomyfish】Java Swing 实现实际大小到全屏切换

Summary:


just provide any JPanel which you want to make it diaplay as full screen mode, it's very helpful for you


to use this utility class.

package com.gloomyfish.smtp.client;
 
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
 
/**
 * @author gloomy fish
 * @date 2011-03-03
 */
public class FullScreenViewer {
  private Dimension size;
  private JPanel sourcePanel;
  private JPanel buttonsPanel;
  private JButton exitBtn;
 
  /**
   * 
   display any JComponent as full screen, need to pass in root Container
   * 
   * invoke swing graphic utility tool, it's a bug!! when double buffer image
   * JFreechart * @param JFrame rootComponent
   */
  public void showFullScreenOne(Frame rootComponent) {
    final JDialog dialog = new JDialog(rootComponent, true);
    dialog.getContentPane().setLayout(new BorderLayout());
    final Container parent = sourcePanel.getParent();
    dialog.getContentPane().add(sourcePanel, BorderLayout.CENTER);
    dialog.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
    dialog.setUndecorated(true);
    exitBtn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
      }
    });
    GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();
    GraphicsDevice gd = ge.getDefaultScreenDevice();
    if (gd.isFullScreenSupported()) {
      try {
        gd.setFullScreenWindow(dialog);
      } finally {
        gd.setFullScreenWindow(null);
        dialog.dispose();
        if (parent != null) {
          sourcePanel.setSize(size);
          parent.add(sourcePanel);
        }
      }
    }
  }
 
  /**
   * * it's a bug!! when double buffer image JFreechart
   * 
   * @param owner
   */
  public void showFullScreenTwo(Frame owner) {
    final JDialog dialog = new JDialog(owner, true);
    dialog.getContentPane().setLayout(new BorderLayout());
    final Container parent = sourcePanel.getParent();
    dialog.getContentPane().add(sourcePanel, BorderLayout.CENTER);
    dialog.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
    exitBtn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
        dialog.dispose();
        if (parent != null) {
          sourcePanel.setSize(size);
          parent.add(sourcePanel);
        }
      }
    });
    Toolkit tk = Toolkit.getDefaultToolkit();
    int xSize = ((int) tk.getScreenSize().getWidth());
    int ySize = ((int) tk.getScreenSize().getHeight());
    dialog.setUndecorated(true);
    dialog.setSize(xSize, ySize);
    dialog.setResizable(false);
    dialog.setVisible(true);
    dialog.toFront();
  }
 
  public FullScreenViewer(JPanel sourcePanel) {
    this.sourcePanel = sourcePanel;
    initComponents();
  }
 
  private void initComponents() {
    exitBtn = new JButton("Exit");
    buttonsPanel = new JPanel();
    buttonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
    buttonsPanel.add(exitBtn);
    size = new Dimension(sourcePanel.getSize().width,
        sourcePanel.getSize().height);
  }
}

PS:

There is an potential problem in above code implementation, just contact me

if you found this issue as well...

相关文章
|
10天前
|
Java 数据安全/隐私保护
利用Java图形化界面组件Swing写一个简易的登录界面
利用Java图形化界面组件Swing写一个简易的登录界面
22 1
|
17天前
|
Java Windows
基于java Swing编写扫雷游戏设计实现(已调试)
基于java Swing编写扫雷游戏设计实现(已调试)
25 1
|
24天前
|
Java
Java Swing模拟水波纹扩散效果动画
Java Swing模拟水波纹扩散效果动画
26 6
|
24天前
|
Java
JAVA Swing自定义JScorllPanel
JAVA Swing自定义JScorllPanel
13 1
|
3天前
|
前端开发 Java UED
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
|
17天前
|
存储 设计模式 前端开发
[笔记] 疯狂JAVA讲义(第3版)第12章 Swing编程
[笔记] 疯狂JAVA讲义(第3版)第12章 Swing编程
|
25天前
|
Java
Java Swing 层次面板(JLayeredPanel) Demo
Java Swing 层次面板(JLayeredPanel) Demo
12 0
|
25天前
|
缓存 Java
Java Swing 2D系统属性参数详解
Java Swing 2D系统属性参数详解
20 0
|
2月前
|
设计模式 Java 开发者
Java一分钟之-Swing组件:JTable, JTree, JTextArea
本文介绍了Java Swing的三个关键组件:`JTable`、`JTree`和`JTextArea`,用于数据展示和用户输入。`JTable`展示二维数据,如表格;`JTree`展示层次结构数据,如文件系统;`JTextArea`则用于多行文本输入和显示。每个组件都提供了示例代码,并列出常见问题及避免方法,如数据源未设置、滚动面板缺失等。理解并掌握这些组件,能帮助开发者创建高效用户界面。
40 0
|
2月前
|
Java
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)