私はすぐにプロジェクトをやっているので、フルスクリーンモードを使用する必要があります。
ウィンドウにいくつかのグラフィックを描画します。 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
は、1つの画面でアプリをフルスクリーンモードにするために使用されます(否定的)。
例えば。:
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
になります。
1つの方法は、拡張状態を使用することです。これは、基盤となるOSにJFrameを最大化するように要求します。
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では、上記の問題は存在しません。しかし、 Gnome または 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 );
}
フレームのオブジェクトのインスタントを使用するのに役立ちます
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
まず第一に、それはあなたが使用したい解像度、1650,1080
です。
追加します:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
JFrame上のコンポーネントに問題がある場合は、frame.add(component)
メソッドを使用してすべてのコンポーネントを追加した後、次のステートメントを追加します。
frame.pack();
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
これにより、フレームが画面サイズになります
私が意味する強調された値:
これだけが必要です:
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
MAXIMIZED_BOTH修飾子を使用すると、ウィンドウ全体で最大化されます(高さと幅)。
これを使用することを提案するいくつかがあります:
frame.setUndecorated(true);
ウィンドウにはヘッダーがなく、閉じる/復元/最小化ボタンがないため、お勧めしません。