2012-06-26 14 views
5

मैं अपने कार्यक्रम के लिए जेएफआरएएम बना रहा हूं। मेरे पास एक आइकन है जिसका मैंने प्रोग्राम के लिए उपयोग किया था और मैंने जेएफआरएएम पर पहली चीज़ के रूप में दिखाया है, लेकिन मुझे छवि को केंद्र में रखने का प्रयास करने में समस्याएं हैं। अगर मैं किसी प्रकार का केंद्र केंद्रित करता हूं तो यह सबकुछ के पूरे संरेखण को खराब कर देता है।जेएफआरएएम में छवि केंद्रित करना?

मैं आइकन के अलावा सभी जेएलएबल्स को गठबंधन छोड़ने की कोशिश कर रहा हूं। फिर आइकन को केंद्र में गठबंधन किया गया है।

मुझे कुछ व्यक्तिगत जानकारी निकालना पड़ा, जो भी मैंने हटा दिया था, मैंने उन्हें "[]" के बीच रखा था।

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 शामिल है। आप JPanel का उपयोग करके बॉक्सलेआउट का उपयोग करके एक तरफ सामान को ढेर कर सकते हैं जो जेपीनल का उपयोग करके मुख्य सीमावर्ती में जोड़ा जाता है।

जैसे

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

@ चुदापति 0 9: आपका स्वागत है! आशा है कि आप मेंढक पसंद आया। –

+0

हाहा, मैंने यह ध्यान नहीं दिया। मैंने बस अपने कोड अवधारणाओं को मेरे कोड पर लागू किया है। हालांकि, वह बहुत मजेदार था। – samwell

संबंधित मुद्दे