Tôi đang tập hợp một hoạt ảnh nhanh và bẩn bằng cách sử dụng xích đu. Tôi muốn cửa sổ được mở rộng tối đa. Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Với điều kiện bạn đang mở rộng JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
setVisible(true)
đầu tiên, khung không được định kích thước chính xác. Tôi đã thử nó cả trước và sau setExtendedState()
, và setVisible()
phải là người đầu tiên.
JFrame
kế thừa từ Frame
).
Cái gì đó như 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);
}
}
|
? Nó có làm được một, và nếu thất bại, nó có làm được không? Hay bạn chỉ ra lựa chọn lập trình viên (tức là chọn một trong A | B để thực hiện cuộc gọi này?) Tôi chưa từng thấy cú pháp này trước đây.
Nếu bạn đang sử dụng JFrame, hãy thử cái này
JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Làm thế nào về JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)
?
tôi thích phiên bản này:
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);
}
}
Cách đặt JFrame thành toàn màn hình, là đặt MAXIMIZED_BOTH
tùy chọn viết tắt của MAXIMIZED_VERT | MAXIMIZED_HORIZ
, tương ứng đặt khung để tối đa hóa theo chiều dọc và chiều ngang
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);
}
}
Tôi đã thử các giải pháp trong chuỗi này và các giải pháp ở đây , nhưng việc gọi đơn giản setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
ngay sau khi gọi setVisible(true);
dường như không hoạt động đối với môi trường của tôi (Windows 10, JDK 1.8, thanh tác vụ của tôi nằm ở bên phải màn hình của tôi). Làm theo cách này vẫn để lại một khoảng trống nhỏ ở bên trái, bên phải và bên dưới.
Tuy nhiên, những gì đã làm việc cho tôi, đang gọi setExtendedState(...
khi cửa sổ được kích hoạt, như vậy:
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);
}
}
);
}
}
Tôi đã kết thúc bằng cách sử dụng mã này:
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);
}
}
Tùy chọn này hoạt động tốt nhất trong tất cả các tùy chọn, bao gồm hỗ trợ nhiều màn hình. Lỗ hổng duy nhất này có là phần bù thanh tác vụ được sử dụng trên tất cả các màn hình là một số cấu hình.
Câu trả lời của @kgiannakakis là hoàn toàn chính xác, nhưng nếu ai đó gặp sự cố này và sử dụng Java 6 trên Linux (ví dụ: Mint 19 Cinnamon), trạng thái MAXIMIZED_BOTH đôi khi không được áp dụng.
Bạn có thể thử gọi phương thức pack () sau khi thiết lập trạng thái này.
Ví dụ về mã:
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();
}
Điều này là không cần thiết nếu bạn đang sử dụng Java 7+ hoặc Java 6 trên Windows.
JFrame.MAXIMIZED_BOTH
thay thế.