JFrame没有显示所有内容?必须调整大小才能显示内容

时间:2015-03-18 08:52:54

标签: java swing jframe

我正在尝试构建一个简单的GUI界面。我使用paintComponent方法将背景图像添加到JPanel。

问题是当构建输出时,它只显示一个小窗口,如下所示:

outputWindow

我必须调整输出窗口的大小才能显示完整的图像。如何使图像适合窗口?

这是我的新源代码:

    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);

     }

}
}

2 个答案:

答案 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,那你为什么要再问这个问题呢?