【问题标题】:GridBagLayout not placing components at page startGridBagLayout 不在页面开始时放置组件
【发布时间】:2010-12-20 10:14:15
【问题描述】:

我正在为我的 Java 应用程序使用网格包布局,但问题是,它没有将组件放置在页面开头。这是我正在使用的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Trial extends JFrame {

  JLabel banner;
  Container c;
  GridBagConstraints gbc = new GridBagConstraints();
  GridBagLayout gbl;
  public Trial()
  {
    setTitle("Attendence Manager");
    setIconImage(Toolkit.getDefaultToolkit().getImage("images/icon.png"));
    Dimension dim= Toolkit.getDefaultToolkit().getScreenSize();
    setSize(new Dimension(dim.width-20,dim.height-100));
    c= getContentPane();
    gbl= new GridBagLayout();
    setLayout(gbl);
    banner = new JLabel(new ImageIcon("images/banner.jpg"));
    gbc.anchor=GridBagConstraints.PAGE_START;
    gbc.gridx=0;
    gbc.gridy=0;
    gbc.gridwidth=GridBagConstraints.REMAINDER;
    c.add(banner,gbc);
    this.setVisible(true);
    addWindowListener(new MyWindowAdapter());
  }

  public static void main(String[] args) {
    Trial t = new Trial();
  }

}
class MyWindowAdapter extends WindowAdapter
{
  //LoginPage sp;
  public MyWindowAdapter()
  {
  }

  @Override
  public void windowClosing(WindowEvent we)
  {
    System.exit(0);
  }
}

我也试过了

gbc.anchor = GridBagConstraints.FIRST_LINE_START;

即使这样也没有用。这是我得到的输出:

【问题讨论】:

    标签: java user-interface swing gridbaglayout


    【解决方案1】:

    首先你需要设置

    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    

    但这只会使 JLabel 填充整个空间,而不是 JLabel 内的图标。如果你想让你的图像缩放并用完整个空间。我建议您将图像读入BufferedImage,然后重写paintComponent() 方法以绘制BufferedImage 的缩放实例。像这样:

    public Trail() {
        setTitle("Attendence Manager");
        setIconImage(Toolkit.getDefaultToolkit().getImage("images/icon.png"));
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new Dimension(dim.width - 20, dim.height - 100));
        c = getContentPane();
        gbl = new GridBagLayout();
        setLayout(gbl);
    
        try {
            final BufferedImage image = ImageIO.read(new File("images/sample.jpg"));
            banner = new JLabel(){
                public void paintComponent(Graphics g) {
                    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
                }
            };
            gbc.fill = GridBagConstraints.BOTH;
            gbc.weightx = 1.0;
            gbc.weighty = 1.0;
            c.add(banner, gbc);
        }
        catch (IOException ex) {
            Logger.getLogger(Trail.class.getName()).log(Level.SEVERE, null, ex);
        }
    
        this.setVisible(true);
        addWindowListener(new MyWindowAdapter());
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      相关资源
      最近更新 更多