java – 在JFrame中居中图像?

我正在为我的程序创建一个关于JFrame的东西.我有一个用于该程序的图标,我将其显示为关于JFrame的第一件事,但我在尝试使图像居中时遇到问题.如果我进行某种对中操作,它会搞砸其他一切的整体对齐.

我试图将除图标之外的所有JLabel保持对齐.然后将图标与中心对齐.

我不得不删除一些个人信息,无论我删除了什么,我把它们放在“[]”之间.

import java.awt.Dimension;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class About extends JFrame {

    public About() {
        super("About [PROGRAM]");
        setIconImage([PROGRAM].getInstance().setIcon());

        JPanel main = new JPanel();

        main.setLayout(new BoxLayout(main,BoxLayout.Y_AXIS));
        main.setBorder(BorderFactory.createEmptyBorder(10,10,10));

        JLabel icon = new JLabel("",new ImageIcon(getClass().getResource(Constants.ICON_FULL)),JLabel.CENTER);        
        JLabel name = new JLabel("[PROGRAM]");
        JLabel expandedname = new JLabel("[PROGRAM DESCRIPTION]");
        JLabel copyright = new JLabel("[copYRIGHT JUNK]");
        JLabel credits = new JLabel("[CREDITS]");

        name.setFont(new Font(name.getFont().getFamily(),Font.BOLD,18));

        copyright.setBorder(BorderFactory.createEmptyBorder(0,0));

        main.add(icon);
        main.add(Box.createRigidArea(new Dimension(0,10)));
        main.add(name);
        main.add(expandedname);
        main.add(copyright);
        main.add(credits);

        add(main);

        pack();
        setLocationRelativeto(null);
        setVisible(true);
    }

}
最佳答案
考虑使用一些布局来帮助你.想到的那些包括BorderLayout和BorderLayout.CENTER位置的图标.您可以使用BoxLayout在一侧堆叠东西,使用JPanel,使用JPanel添加到主BorderLayout.

例如.,

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

@SuppressWarnings("serial")
public class About extends jdialog {
   public static final String IMAGE_PATH = "http://upload.wikimedia.org/wikipedia/"
         + "commons/thumb/3/39/European_Common_Frog_Rana_temporaria.jpg/"
         + "800px-European_Common_Frog_Rana_temporaria.jpg";

   public About(JFrame frame) {
      super(frame,"About [PROGRAM]",true);

      ImageIcon myIcon = null;
      try {
         URL imgurl = new URL(IMAGE_PATH);
         BufferedImage img = ImageIO.read(imgurl);
         myIcon = new ImageIcon(img);
      } catch (MalformedURLException e) {
         e.printstacktrace();
         System.exit(-1);
      } catch (IOException e) {
         e.printstacktrace();
         System.exit(-1);
      }

      JPanel main = new JPanel(new BorderLayout());

      main.setBorder(BorderFactory.createEmptyBorder(10,10));

      JLabel centerLabel = new JLabel(myIcon);
      JLabel name = new JLabel("[PROGRAM]");
      JLabel expandedname = new JLabel("[PROGRAM DESCRIPTION]");
      JLabel copyright = new JLabel("[copYRIGHT JUNK]");
      JLabel credits = new JLabel("[CREDITS]");

      name.setFont(new Font(name.getFont().getFamily(),18));

      copyright.setBorder(BorderFactory.createEmptyBorder(0,0));

      int eb = 20;
      centerLabel.setBorder(BorderFactory.createEmptyBorder(eb,eb,eb));

      JPanel leftPanel = new JPanel();
      leftPanel.setLayout(new BoxLayout(leftPanel,BoxLayout.PAGE_AXIS));
      leftPanel.add(name);
      leftPanel.add(Box.createVerticalglue());
      leftPanel.add(expandedname);
      leftPanel.add(copyright);
      leftPanel.add(credits);
      leftPanel.add(Box.createVerticalglue());

      main.add(centerLabel,BorderLayout.CENTER);
      main.add(leftPanel,BorderLayout.LINE_START);

      add(main);

      pack();
   }

   public static void main(String[] args) {
      final JFrame frame = new JFrame("GUI");
      JPanel panel = new JPanel();
      panel.add(new JButton(new AbstractAction("About") {

         @Override
         public void actionPerformed(ActionEvent e) {
            About about = new About(frame);
            about.setLocationRelativeto(frame);
            about.setVisible(true);
         }
      }));
      frame.add(panel);
      frame.pack();
      frame.setLocationRelativeto(null);
      frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...