【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...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JavaSwing可以通过使用CardLayout来实现界面的切换。CardLayout可以将多个面板叠放在同一位置,并且只显示其中一个面板,其他面板则被隐藏。当需要显示另一个面板时,可以使用CardLayout中的show方法来进行切换。 以下是一个简单的例子,演示了如何使用CardLayout来实现两个面板之间的切换。 首先,创建一个包含两个面板的JFrame: ``` JFrame frame = new JFrame("CardLayout Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); JPanel panel1 = new JPanel(); JLabel label1 = new JLabel("Panel 1"); panel1.add(label1); JPanel panel2 = new JPanel(); JLabel label2 = new JLabel("Panel 2"); panel2.add(label2); JPanel cards = new JPanel(new CardLayout()); cards.add(panel1, "panel1"); cards.add(panel2, "panel2"); frame.getContentPane().add(cards); frame.setVisible(true); ``` 在这个例子中,我们创建了两个面板panel1和panel2,并将它们添加到一个名为cards的容器中。在cards容器中,我们使用CardLayout来管理两个面板。第一个参数是要添加的面板,第二个参数是面板的名称。 接下来,我们可以使用CardLayout的show方法来切换面板。例如,我们可以在panel1中添加一个按钮,当用户点击该按钮时,切换到panel2: ``` JButton button = new JButton("Switch to Panel 2"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CardLayout cardLayout = (CardLayout) cards.getLayout(); cardLayout.show(cards, "panel2"); } }); panel1.add(button); ``` 这样,当用户点击按钮时,CardLayout就会隐藏panel1,显示panel2,实现界面的切换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gloomyfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值