Portál AbcLinuxu, 3. listopadu 2025 14:41
Tento programek by mel spustit maximalizovane okno:
mport java.awt.Frame;
import javax.swing.*;
import java.awt.Toolkit;
public class Test
{
JFrame frame;
public Test()
{
frame = new JFrame("Test");
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.setVisible(true);
System.out.println(Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH));
}
public static void main(String[] args)
{
Test app = new Test();
}
}
Problem je, ze se okno sice otevre, ale ma rozmery asi 20x20px. V dokumentaci jsem se docetl, ze ne na vsech platformach je metoda setExtendedState funkcni, proto ten radek s isFrameStateSupport. isFrameStateSupport() mi vraci true, coz znamena, ze podporovana by byt mela. Kdyz si prosim nekdo prelozite ten programek, spusti se hlavni okno maximalizovane nebo ne?
Řešení dotazu:
frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setVisible(true) ještě frame.pack(), aby se spočítaly správné rozměry okna. Jinak se to musí udělat až v okamžiku zobrazení, a nově vypočtené rozměry v tom okamžiku pravděpodobně přebijí nastavenou maximalizaci. Ve Windows se maximalizace udrží i přes to, ale třeba v okenním manažeru KDE 3.5 už ne. Rozdíl asi plyne z různécho chování okenních manažerů k tomu, co znamená maximalizovaný stav okna.
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); Rectangle maxBounds = environment.getMaximumWindowBounds(); window.setSize(new Dimension((int)maxBounds.getWidth(), (int)maxBounds.getHeight()));Mam to odzkouseny s decorated i undecorated JFrame, getMaximumWindowBounds by melo pocitat se vsim na plose co je panel a tak. Hodne zdaru!
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.