JFrame в полноэкранном режиме Java
Я скоро буду делать проект, и мне придется использовать полноэкранный режим в нем.
Он будет рисовать графики в окне. Было бы удобно, если я использую JFrame или что-то подобное.
Я не знаю, каково будет окончательное разрешение экрана. Пожалуйста, скажите мне, если graphicss будет автоматически масштабироваться?
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?
10 ответов:
добавить:
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); }
использовать
setExtendedState(int state)
, где государство будетJFrame.MAXIMIZED_BOTH
.
один из способов-использовать расширенное состояние. Это требует базовой ОС, чтобы увеличить форму.
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
другой подход будет вручную максимизировать экран для вас требование.
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight()); setLocationRelativeTo(null);
но это имеет подводные камни в Ubuntu OS. Работа вокруг я нашел это.
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);
в Fedora вышеуказанной проблемы нет. Но есть осложнения, связанные с Гном или KDE. Так что лучше быть осторожным. Надеюсь, что это помогает.
просто используйте этот код :
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; } } } }
Я надеюсь, что это помогает.
самое простое исправление:
for (Window w : Window.getWindows()) { GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(w); }
прежде всего, это разрешение, которое вы хотели бы использовать,
1650,1080
.теперь добавить:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
если у вас есть проблемы с компонентами на JFrame, то после того, как вы добавили все компоненты с помощью
frame.add(component)
метод, добавьте следующий оператор.frame.pack();