Я собираю быструю и грязную анимацию с помощью свинга. Я хочу, чтобы окно было развернуто. Как я могу это сделать?
89
Я собираю быструю и грязную анимацию с помощью свинга. Я хочу, чтобы окно было развернуто. Как я могу это сделать?
При условии, что вы расширяете JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
JFrame.MAXIMIZED_BOTH
Вместо этого используйте .setVisible(true)
первого рама будет иметь неправильный размер. Я пробовал и до, и послеsetExtendedState()
, иsetVisible()
должен быть первым.JFrame
наследуются отFrame
).Что-то типа
this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
import java.awt.*; import javax.swing.*; public class Test extends JFrame { public Test() { GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); this.setMaximizedBounds(env.getMaximumWindowBounds()); this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); Test t = new Test(); t.setVisible(true); } }
источник
|
? Выполняет ли он одно, а в случае неудачи - другое? Или вы указываете выбор программиста (т.е. выберите один из A | B для этого вызова?) Я раньше не видел этого синтаксиса.Если вы используете JFrame, попробуйте это
JFrame frame = new JFrame(); //... frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
источник
Как насчет
JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)
?источник
мне нравится эта версия:
import java.awt.Dimension; import java.awt.GraphicsConfiguration; import java.awt.Toolkit; import javax.swing.JFrame; public class Test { public static void main(String [] args) { final JFrame frame = new JFrame(); final GraphicsConfiguration config = frame.getGraphicsConfiguration(); final int left = Toolkit.getDefaultToolkit().getScreenInsets(config).left; final int right = Toolkit.getDefaultToolkit().getScreenInsets(config).right; final int top = Toolkit.getDefaultToolkit().getScreenInsets(config).top; final int bottom = Toolkit.getDefaultToolkit().getScreenInsets(config).bottom; final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); final int width = screenSize.width - left - right; final int height = screenSize.height - top - bottom; frame.setResizable(false); frame.setSize(width,height); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
источник
Чтобы установить JFrame в полноэкранный режим, нужно установить
MAXIMIZED_BOTH
опцию, которая обозначаетMAXIMIZED_VERT | MAXIMIZED_HORIZ
, которая соответственно устанавливает фрейм для максимизации по вертикали и горизонтали.package Example; import java.awt.GraphicsConfiguration; import javax.swing.JFrame; import javax.swing.JButton; public class JFrameExample { static JFrame frame; static GraphicsConfiguration gc; public static void main(String[] args) { frame = new JFrame(gc); frame.setTitle("Full Screen Example"); frame.setExtendedState(MAXIMIZED_BOTH); JButton button = new JButton("exit"); b.addActionListener(new ActionListener(){@Override public void actionPerformed(ActionEvent arg0){ JFrameExample.frame.dispose(); System.exit(0); }}); frame.add(button); frame.setVisible(true); } }
источник
Я пробовал решения в этом потоке и здесь , но простой вызов
setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
сразу после вызова, по-setVisible(true);
видимому, не работает для моей среды (Windows 10, JDK 1.8, моя панель задач находится в правой части экрана). При этом остается небольшое пространство слева, справа и снизу.Однако у меня сработало вызов,
setExtendedState(...
когда окно активировано, например:public class SomeFrame extends JFrame { public SomeFrame() { // ... setVisible(true); setResizable(true); // if you are calling setSize() for fallback size, do that here addWindowListener ( new WindowAdapter() { private boolean shown = false; @Override public void windowActivated(WindowEvent we) { if(shown) return; shown = true; setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); } } ); } }
источник
В итоге я использовал этот код:
public void setMaximized(boolean maximized){ if(maximized){ DisplayMode mode = this.getGraphicsConfiguration().getDevice().getDisplayMode(); Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration()); this.setMaximizedBounds(new Rectangle( mode.getWidth() - insets.right - insets.left, mode.getHeight() - insets.top - insets.bottom )); this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH); }else{ this.setExtendedState(JFrame.NORMAL); } }
Этот вариант работал лучше всего, включая поддержку нескольких мониторов. Единственный недостаток в том, что смещение панели задач используется на всех мониторах, это некоторые конфигурации.
источник
Ответ @kgiannakakis полностью верен, но если кто-то застрял в этой проблеме и использует Java 6 в Linux (например, Mint 19 Cinnamon), состояние MAXIMIZED_BOTH иногда не применяется.
Вы можете попробовать вызвать метод pack () после установки этого состояния.
Пример кода:
public MainFrame() { setContentPane(contentPanel); //some JPanel is here setPreferredSize(new Dimension(1200, 800)); setMinimumSize(new Dimension(1200, 800)); setSize(new Dimension(1200, 800)); setExtendedState(JFrame.MAXIMIZED_BOTH); pack(); }
В этом нет необходимости, если вы используете Java 7+ или Java 6 в Windows.
источник