Full image of my window
The grey border of JFrame
visible
问题:
我希望我的应用程序在默认情况下全屏运行(最大化)(但是不同笔记本电脑的默认最大分辨率不同)。我在JPanel
上使用了一个根据用户电脑的大小和宽度缩放的背景图像。但是随着装饰和调整大小功能的“打开”,JPanel
并没有完全填满JFrame
。
我希望我的应用程序:
1.允许用户根据使用情况调整其大小,并沿着其缩放图像
1.在最大化视图中(默认情况下:setExtendedState(JFrame.MAXIMIZED_BOTH);
),图像覆盖整个JFrame
(注:无论是否使用JFrame
,只要解决方案能在所有设备上运行,我都很满意。)
1.如果可能,我的组件也会调整大小
我正在使用NetBeans,JFrame
处于“绝对布局”。我尝试了JPanel
的绝对布局和BorderLayout
(不起作用),尝试了pack()
(也不起作用),jPanel1.setSize(WIDTH,HEIGHT)
与屏幕的尺寸也不起作用。将JPanel
的布局设置为NULL也不能解决问题:(
注册. java(JFrame
)
public class Sign_Up extends javax.swing.JFrame {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
/**
* Creates new form Sign_Up
*/
public Sign_Up() {
initComponents();
Seticon();
btnSave.setEnabled(false);//save button
setExtendedState(JFrame.MAXIMIZED_BOTH);
//setSize(1920,1080);
setLocationRelativeTo(null);//makes aligned at center of screen
//jPanel1.setSize((int)width, (int)height);
//pack();
}
PanelScale.java
public class PanelScale extends JPanel {
Image iconbg;
public PanelScale() {
iconbg = new ImageIcon(getClass( ).getResource("/images/largesignup.png")).getImage( );
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gd = (Graphics2D)g.create();
gd.drawImage(iconbg, 0, 0, getWidth(), getHeight(), this);
gd.dispose();
}
}
JPanel
中的自定义创建代码:new Panel.PanelScale();
我发现唯一起作用的是显式地将JPanel
在JFrame
上拉伸到一些额外的高度(在NetBeans中),但这导致我的应用程序窗口不在屏幕的中心,而是向右移动。
Stretching the Jpanel Over JFrame to some more height
但当我尝试用
setsize(new Dimension(width, height+40));
对于JPanel
,它不起作用。
此外,我可以使用JLabel
来完成此操作,但我希望我的图像能够覆盖JFrame
的全部区域,同时在任何设备(更大或更小的笔记本电脑,如1920x1080分辨率,1280x720等)上以最大化或调整大小的视图工作。
如果提供任何解决方案,即使是一些有或没有JPanel
的替代方式,我将不胜感激。即使应用程序能够在任何设备上全屏工作,图像覆盖它,我会很满意,调整大小功能可以暂时牺牲
Expected
2条答案
按热度按时间9rbhqvlz1#
BorderLayout
(这是默认设置的JFrame
)将完全自动做你想要的,你只需要根据你的需要调整/定位背景。null
(“绝对”)布局确实不是一个好主意。首先看一下How to Use BorderLayout。我还建议看一下Working with Images和JavaDocs for
Graphics2D
,它们将为您提供如何根据需要调整图像大小的信息可运行示例...
kadbb4592#
不要使用
JPanel.setSize()
,而是将JFrame的LayoutManager设置为null
。每次更改窗口大小时,都要使用JPanel.setBounds(0,0,windowWidth,windowHeight)
方法调整JPanel的大小。您可能需要调用repaint()
方法在屏幕上重新绘制组件。代码的结果如下:
如果删除代码的最后两行,您会注意到大小没有改变。