Salıncak kullanarak hızlı ve kirli bir animasyon oluşturuyorum. Pencerenin maksimize edilmesini istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
JFrame'i genişletmeniz şartıyla:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
setVisible(true)
İlk olmadan , çerçeve doğru boyutlandırılmaz. Hem önce hem de sonra denedim setExtendedState()
ve setVisible()
ilk olmalı.
JFrame
miras alan Frame
).
Gibi bir şey 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);
}
}
|
için? Birini yapıyor mu ve başarısız olursa diğerini mi yapıyor? Yoksa programcı seçimini mi gösteriyorsunuz (yani bu çağrıya gitmek için A | B'den birini seçin?) Bu sözdizimini daha önce görmemiştim.
Bir JFrame kullanıyorsanız, bunu deneyin
JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
bu sürümü beğendim:
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'i tam ekrana ayarlamanın yolu, çerçeveyi sırasıyla dikey ve yatay olarak büyütecek şekilde ayarlayan MAXIMIZED_BOTH
seçeneği MAXIMIZED_VERT | MAXIMIZED_HORIZ
belirlemektir.
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);
}
}
Ben bu iplik çözümleri ve olanları denedim burada ama sadece çağıran setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
çağrıldıktan sonra sağ setVisible(true);
görünüşte benim çevre için çalışma yapmaz (Windows 10, JDK 1.8, benim görev çubuğu benim ekranın sağ tarafında). Bu şekilde yapmak solda, sağda ve altta hala küçük bir boşluk bırakır.
Ancak benim için işe yarayan şey setExtendedState(...
, pencere etkinleştirildiğinde şu şekilde aramak oldu:
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);
}
}
);
}
}
Bu kodu kullandım:
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);
}
}
Bu seçenekler, çoklu monitör desteği dahil tüm seçeneklerden en iyi şekilde çalıştı. Bunun sahip olduğu tek kusur, görev çubuğu ofsetinin tüm monitörlerde kullanılmasıdır. Bazı yapılandırmalar.
@kgiannakakis cevabı tamamen doğru, ancak kimse bu sorunla sıkışmış ve kullanıyorsa Java 6 üzerinde Linux (örnek, Nane 19 Tarçın), MAXIMIZED_BOTH devlet bazen uygulanmaz.
Paketi aramayı deneyebilirsiniz ()Bu durumu ayarladıktan sonra yöntemini .
Kod örneği:
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();
}
Windows'ta Java 7+ veya Java 6 kullanıyorsanız bu gerekli değildir.
JFrame.MAXIMIZED_BOTH
Bunun yerine kullanın .