我正在尝试构建一个简单的GUI界面。我使用paintComponent方法将背景图像添加到JPanel。
问题是当构建输出时,它只显示一个小窗口,如下所示:
我必须调整输出窗口的大小才能显示完整的图像。如何使图像适合窗口?
这是我的新源代码:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test extends JFrame {
public test(){
super("Staff Management");
this.setContentPane(new staff());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.pack();
}
public class staff extends JPanel{
private ImageIcon i;
public staff() {
i = new ImageIcon("D:\\staff-directory.jpg");
}
@Override
public Dimension getPreferredSize() {
return new Dimension(i.getIconWidth(),i.getIconHeight());
}
public void paintComponent(Graphics g){
super.paintComponent(g);
i.paintIcon(this,g,0,0);
}
}
}
答案 0 :(得分:2)
绘制组件时,需要覆盖getPreferedSize()
方法以定义自定义组件的大小。您可以像下一个更改您的课程:
public class staff extends JPanel{
private ImageIcon i;
public staff() {
i = new ImageIcon("d:\\staff.jpg");
}
@Override
public Dimension getPreferredSize() {
return new Dimension(i.getIconWidth(),i.getIconHeight());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
i.paintIcon(this, g, 0, 0);
}
}
也只使用pack()
代替this.setSize(894,553);
。
答案 1 :(得分:2)
这个网站上的几乎所有答案都说使用JPanel的自定义绘画,所以我花了一天时间学习如何做到这一点。
这些答案通常建议您使用Graphics.drawImage(...)方法绘制图像。即使您在上一个问题中得到的答案也表明了这一点,所以我不知道您为什么要尝试绘制一个Icon。没有理由创建一个图标来保存图像。
如果你能告诉我如何使用JLabel和Icon来做这件事,这将是一个很好的帮助
没有诀窍。就像使用JPanel一样:
JLabel label = new JLabel( ... );
label.setLayout( new FlowLayout() );
label.add( new JButton("one") );
label.add( new JButton("two") );
如果您不知道如何将图标添加到JLabel,请阅读How to Use Icons上的Swing教程。
你在这里的问题中得到了这个建议:https://stackoverflow.com/a/29091847/131872,那你为什么要再问这个问题呢?