让一个组件全屏

1.用GraphicsEnvironment类:

GraphicsEnvironment ge= GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
JFrame frame = new JFrame();//也可以用JWindow,不过window听说不能获得焦点
frame.setUndecorated(true);//如果不要这一句,则全屏后frame的边框虽然不可见,但还是会占位置;但是要只一句之后边框就回不来了
gd.setFullScreenWindow(frame);

退出全屏:

GraphicsEnvironment.getLocalGraphicsEnvironment()
        .getDefaultScreenDevice().setFullScreenWindow(null);



2.用JFrame的setUndecorated(true);然后再setSize(Toolkit.getDefaultToolkit().getScreenSize());

不过我试过,发现同上,setUndecorated之后好像就这设置不回来了,也就是这个frame就没有变边框了。。
也就是setUndecorated(false);没效果了,为什么呀?



3.我想让一个frame里面的一个显示图像的component全屏(不是整个Frame全屏),全屏之后还能回到有边框的Frame。我是这么解决的:
a.按下一个按钮是让这个显示图像的component全屏:新建一个JFrame,把这个component从原来的JFrame中remove出来,加入新的JFrame。用第二种方法让这个Frame全屏;
b.在这个显示图像的component添加keyListner,按下ESC键时用第二种方法推出全屏,再把这个component从新的JFrame中remove掉,添加到原来旧的的JFrame中

package fullscreen;

import java.awt.BorderLayout;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class OriginalFrame extends JFrame {
	JFrame fullScreenFrame;
	JLabel label;
	public static void main(String[] args){
		new OriginalFrame();
	}
	public OriginalFrame(){
		
		final JLabel label = new JLabel("<html><font size=5 color=red>press ESC to quit full screen</font></html>");
		label.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE){//用keycode判断时不能写在keyTyped方法里,否则keyCode都是0,不知为什么
					fullScreenFrame.remove(label);
					OriginalFrame.this.add(label);
					GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(null);
					
				}
			}
		});
		
		JButton button = new JButton("全屏");
		add(label);
		add(button,BorderLayout.SOUTH);
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				OriginalFrame.this.remove(label);
				fullScreenFrame.add(label);
				GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(fullScreenFrame);
				label.requestFocus();
			}
		});
		
		fullScreenFrame = new JFrame();
		fullScreenFrame.setUndecorated(true);
		
		setSize(300,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
}

转载于:https://my.oschina.net/soitravel/blog/33566

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值