2012-06-26 36 views
5

Tôi đang tạo một JFrame cho chương trình của mình. Tôi có một biểu tượng mà tôi sử dụng cho chương trình và tôi có hiển thị như là điều đầu tiên trên về JFrame, nhưng tôi đang gặp vấn đề cố gắng để trung tâm hình ảnh. Nếu tôi làm một số loại định tâm, nó sẽ điều chỉnh toàn bộ sự liên kết của mọi thứ khác.Căn giữa hình ảnh trong JFrame?

Tôi đang cố gắng để có tất cả các JLabels, ngoài biểu tượng, được căn trái. Sau đó, có biểu tượng liên kết với trung tâm.

Tôi phải xóa một số thông tin cá nhân, bất kỳ thông tin nào tôi đã xóa tôi đặt chúng giữa "[]".

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

bạn muốn vào biểu tượng để được tập trung trong nền? hoặc chỉ tập trung vào văn bản xung quanh nó? – Soronthar

+0

Không. Tôi muốn có một hình ảnh và vài nhãn xếp chồng lên nhau, nhưng có hình ảnh ở giữa. – samwell

Trả lời

4

Cân nhắc sử dụng một số bố cục để giúp bạn. Những điều cần chú ý bao gồm BorderLayout với biểu tượng ở vị trí BorderLayout.CENTER. Bạn có thể ngăn xếp các công cụ trên một mặt bằng cách sử dụng một BoxLayout bằng cách sử dụng JPanel được thêm vào chính BorderLayout-sử dụng JPanel.

ví dụ

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: bạn được chào đón! Hy vọng bạn thích con ếch. –

+0

Haha, tôi không nhận thấy điều đó. Tôi chỉ áp dụng các khái niệm mã của bạn vào mã của tôi. Tuy nhiên, đó là khá buồn cười. – samwell

Các vấn đề liên quan