2012-06-26 9 views
5

私のプログラムの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,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,10,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); 
    } 

} 
+1

あなたはアイコンをバックグラウンドでセンタリングされるようにしたいですか?またはそのまわりのテキストの中央に配置されていますか? – Soronthar

+0

どちらもありません。私はイメージを持っていて、カップルのラベルを重ねて重ねてイメージを中心にしたいと思っていました。 – samwell

答えて

4

いくつかのレイアウトを使用してください。気になるものには、BorderLayout.CENTERの位置にアイコンがあるBorderLayoutが含まれます。メインのBorderLayoutにJPanelを使用してJPanelを使用してJPanelを使用してBoxLayoutを使用して片面に物を積み重ねることができます。

は、例えば、

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, 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(), Font.BOLD, 18)); 

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

     int eb = 20; 
     centerLabel.setBorder(BorderFactory.createEmptyBorder(eb, 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); 
    } 
} 
+1

@ chudapati09:どうぞよろしく!カエルが好きだと思っています。 –

+0

母、私はそれに気付かなかった。私はちょうど私のコードにあなたのコードの概念を適用しました。しかし、それはかなり面白かったです。 – samwell

関連する問題