请帮我写段Java代码,要求jframe窗口中背景图片随窗口大小变大或变小,有一个文本框和密码框,上下排列,并在窗口居中
时间: 2023-06-20 12:06:43 浏览: 139
以下是示例代码,实现了JFrame窗口中背景图片的自适应,并添加了一个文本框和密码框,并使其上下排列并居中显示。
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyFrame extends JFrame implements ComponentListener {
private JLabel background;
private JTextField textField;
private JPasswordField passwordField;
public MyFrame() {
super("My Frame");
setSize(600, 400);
setLocationRelativeTo(null);
// 设置背景图片
ImageIcon imageIcon = new ImageIcon("background.jpg");
Image image = imageIcon.getImage().getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH);
background = new JLabel(new ImageIcon(image));
setContentPane(background);
// 添加文本框和密码框
textField = new JTextField(20);
passwordField = new JPasswordField(20);
JPanel panel = new JPanel();
panel.add(textField);
panel.add(passwordField);
panel.setOpaque(false);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
add(panel, BorderLayout.CENTER);
addComponentListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
// 窗口大小改变时,重新设置背景图片大小
public void componentResized(ComponentEvent e) {
ImageIcon imageIcon = new ImageIcon("background.jpg");
Image image = imageIcon.getImage().getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH);
background.setIcon(new ImageIcon(image));
}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
public void componentHidden(ComponentEvent e) {}
public static void main(String[] args) {
new MyFrame();
}
}
```
需要注意的是,为了在窗口大小改变时重新设置背景图片大小,我们需要实现 `ComponentListener` 接口,并注册监听器。同时,为了让文本框和密码框上下排列并居中显示,我们使用了 `BoxLayout` 布局管理器,并将面板设置为透明。
阅读全文