Portál AbcLinuxu, 13. května 2025 23:53
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.