java – 在JFrame中居中图像?

前端之家收集整理的这篇文章主要介绍了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);
   }
}

猜你在找的Java相关文章