Witam, chciałbym dodać do mojej clasy głównej component opcję full screen. Niestety jest ona napisana w ten sposób, że nie wiem jak to teraz zrobić.
/*
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.net.Socket;
import java.util.ArrayList;
public class Component extends Applet implements Runnable{
private static final long serialVersionUID = 1L;
private Image screen;
public static Value value;
public static Rectangle single_player_Button = new Rectangle(150, 100, 100, 25);
public static Rectangle multi_player_Button = new Rectangle(150, 150, 100, 25);
public static Rectangle quitButton = new Rectangle(150, 200, 100, 25);
public Component() {
setPreferredSize(value.size);
addKeyListener(new Listening());
addMouseListener(new Listening());
addMouseMotionListener(new Listening());
addMouseWheelListener(new Listening());
}
public void start(){
requestFocus();
value.isRunning = true;
new Thread(this).start();
}
public void stop(){
value.isRunning = false;
}
private static JFrame frame;
public static void main(String args[])throws Exception{
Component component = new Component();
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JFrame fullscreenFrame = new JFrame();
fullscreenFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
fullscreenFrame.setUndecorated(true);
fullscreenFrame.setResizable(false);
fullscreenFrame.add(component);
fullscreenFrame.pack();
fullscreenFrame.validate();
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(fullscreenFrame);
// Jeśli uzyjemy kodu z frame to wszystko działa, ale nie ma FullScreen
/*frame = new JFrame();
frame.add(component);
frame.pack();
value.realSize = new Dimension(frame.getWidth(), frame.getHeight());
frame.setTitle(value.name);
frame.setResizable(true);
frame.setLocation(0, 0);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setAlwaysOnTop(true);*/
component.start();
}
public void tick(){
if(frame.getWidth() != value.realSize.width || frame.getHeight() != value.realSize.height){
frame.pack();
}
//tutaj wykonuje sie ważny kod dla programu (usunąłem, żeby niepotrzebnie nie utrudniać zrozumienie kodu)
}
public void render(){
Graphics g = screen.getGraphics();
if(!value.gameStarted)
{
g.setFont(new Font("Arial", Font.BOLD, 26));
g.setColor(Color.WHITE);
g.drawString("Gra Gwozdzia!", 125, 75);
g.setColor(Color.CYAN);
g.fillRect(single_player_Button.x, single_player_Button.y, single_player_Button.width, single_player_Button.height);
g.setFont(new Font("Arial", Font.BOLD, 12));
g.setColor(Color.GRAY);
g.drawString("Start Single Player", single_player_Button.x+20, single_player_Button.y+17);
g.setColor(Color.CYAN);
g.fillRect(multi_player_Button.x, multi_player_Button.y, multi_player_Button.width, multi_player_Button.height);
g.setFont(new Font("Arial", Font.BOLD, 12));
g.setColor(Color.GRAY);
g.drawString("Multi Player!!!", multi_player_Button.x+20, multi_player_Button.y+17);
g.setColor(Color.CYAN);
g.fillRect(quitButton.x, quitButton.y, quitButton.width, quitButton.height);
g.setColor(Color.GRAY);
g.drawString("Quit Game", quitButton.x+20, quitButton.y+17);
}
else
{
}
g = getGraphics();
g.drawImage(screen, 0, 0, value.size.width, value.size.height, 0, 0, value.pixel.width, value.pixel.height, null);
g.dispose();
}
public void run(){
screen = createVolatileImage(value.pixel.width, value.pixel.height);
while(value.isRunning){
tick();
render();
try{
Thread.sleep(5);
}catch(Exception e){}
}
}
}
Niestety przy tej budowie występuje problem w szczególności z tymi linijkami kodu:
if(frame.getWidth() != value.realSize.width || frame.getHeight() != value.realSize.height){
frame.pack();
}
Graphics g = screen.getGraphics();
Problemem oczywiście jest to, że fullscreen jest, ale cały czarny, a powinien wyświetlać to co znajduje się w metodzie render.