我很快就会做一个项目,我将不得不在其中使用全屏模式。
它将在窗口中绘制一些图形。如果我使用JFrame或类似的东西会很方便。
我不知道屏幕的最终分辨率是多少。请告诉我图形是否会自动重新缩放?
JFrame jf = new JFrame();
jf.setSize(1650,1080);
//make it fullscreen;
//now is everything is going to be rescaled so it looks like the original?
我很快就会做一个项目,我将不得不在其中使用全屏模式。
它将在窗口中绘制一些图形。如果我使用JFrame或类似的东西会很方便。
我不知道屏幕的最终分辨率是多少。请告诉我图形是否会自动重新缩放?
JFrame jf = new JFrame();
jf.setSize(1650,1080);
//make it fullscreen;
//now is everything is going to be rescaled so it looks like the original?
添加:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
如果您想将您的框架置于全屏模式(如全屏电影),请检查这些答案。
类java.awt.GraphicsEnvironment
和java.awt.GraphicsDevice
用于将应用程序置于一个屏幕上的全屏模式(配置)。
例如:
static GraphicsDevice device = GraphicsEnvironment
.getLocalGraphicsEnvironment().getScreenDevices()[0];
public static void main(String[] args) {
final JFrame frame = new JFrame("Display Mode");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setUndecorated(true);
JButton btn1 = new JButton("Full-Screen");
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
device.setFullScreenWindow(frame);
}
});
JButton btn2 = new JButton("Normal");
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
device.setFullScreenWindow(null);
}
});
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel.add(btn1);
panel.add(btn2);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
一种方法是使用扩展状态。这要求底层操作系统最大化 JFrame。
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
其他方法是根据您的要求手动最大化屏幕。
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);
但这在 Ubuntu 操作系统中存在缺陷。我发现的解决方法是这样的。
if (SystemHelper.isUnix()) {
getContentPane().setPreferredSize(
Toolkit.getDefaultToolkit().getScreenSize());
pack();
setResizable(false);
show();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Point p = new Point(0, 0);
SwingUtilities.convertPointToScreen(p, getContentPane());
Point l = getLocation();
l.x -= p.x;
l.y -= p.y;
setLocation(p);
}
});
}
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
setLocationRelativeTo(null);
有史以来最简单的修复:
for ( Window w : Window.getWindows() ) {
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( w );
}
只需使用此代码:
import java.awt.event.*;
import javax.swing.*;
public class FullscreenJFrame extends JFrame {
private JPanel contentPane = new JPanel();
private JButton fullscreenButton = new JButton("Fullscreen Mode");
private boolean Am_I_In_FullScreen = false;
private int PrevX, PrevY, PrevWidth, PrevHeight;
public static void main(String[] args) {
FullscreenJFrame frame = new FullscreenJFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 500);
frame.setVisible(true);
}
public FullscreenJFrame() {
super("My FullscreenJFrame");
setContentPane(contentPane);
// From Here starts the trick
FullScreenEffect effect = new FullScreenEffect();
fullscreenButton.addActionListener(effect);
contentPane.add(fullscreenButton);
fullscreenButton.setVisible(true);
}
private class FullScreenEffect implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (Am_I_In_FullScreen == false) {
PrevX = getX();
PrevY = getY();
PrevWidth = getWidth();
PrevHeight = getHeight();
// Destroys the whole JFrame but keeps organized every Component
// Needed if you want to use Undecorated JFrame dispose() is the
// reason that this trick doesn't work with videos.
dispose();
setUndecorated(true);
setBounds(0, 0, getToolkit().getScreenSize().width,
getToolkit().getScreenSize().height);
setVisible(true);
Am_I_In_FullScreen = true;
} else {
setVisible(true);
setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
dispose();
setUndecorated(false);
setVisible(true);
Am_I_In_FullScreen = false;
}
}
}
}
我希望这有帮助。
它将帮助您使用框架的即时对象
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
首先,这是您要使用的分辨率,1650,1080
.
现在添加:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
如果您对 JFrame 上的组件有疑问,则在使用该frame.add(component)
方法添加所有组件后,添加以下语句。
frame.pack();
你只需要这个:
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
当您使用 MAXIMIZED_BOTH 修饰符时,它将在整个窗口(高度和宽度)中一直保持最大值。
有一些建议使用这个:
frame.setUndecorated(true);
我不会推荐它,因为您的窗口没有标题,因此没有关闭/恢复/最小化按钮。
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
这只是使框架成为屏幕的大小
您可以使用属性工具。为您的JFrame
设置 2 个属性:
extendedState 6
resizeable true
我的意思是强调的价值观:
你可以简单地这样做 -
public void FullScreen() {
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
final View v = this.activity.getWindow().getDecorView();
v.setSystemUiVisibility(8);
}
else if (Build.VERSION.SDK_INT >= 19) {
final View decorView = this.activity.getWindow().getDecorView();
final int uiOptions = 4102;
decorView.setSystemUiVisibility(uiOptions);
}
}
在下面设置 2 个属性:
这个对我有用。