JFrame

2009-06-30 9 views
31

में पृष्ठभूमि छवियों को सेट करना JFrame में पृष्ठभूमि के रूप में छवि सेट करने के लिए कोई भी तरीका उपलब्ध है?JFrame

उत्तर

33

कोई अंतर्निहित विधि नहीं है, लेकिन इसे करने के कई तरीके हैं। इस समय के बारे में मैं सोच सकता हूं कि सबसे सरल तरीका यह है:

  1. JComponent का उप-वर्ग बनाएं।
  2. उस छवि को पेंट करने के लिए paintComponent(Graphics g) विधि को ओवरराइड करें जिसे आप प्रदर्शित करना चाहते हैं। इस सबक्लास होने के लिए
  3. Set the content paneJFrame

कुछ नमूना कोड:

class ImagePanel extends JComponent { 
    private Image image; 
    public ImagePanel(Image image) { 
     this.image = image; 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 

// elsewhere 
BufferedImage myImage = ImageIO.read(...); 
JFrame myJFrame = new JFrame("Image pane"); 
myJFrame.setContentPane(new ImagePanel(myImage)); 

ध्यान दें कि यह कोड JFrame फिट करने के लिए छवि का आकार बदलने के हैंडल नहीं करता, यदि आप चाहते थे कि।

+2

आप super.paintComponents का उपयोग करना चाहिए() painComponent विधि करने के लिए विधि। – Sajad

17

इस प्रयास करें:

import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     try { 
      f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg"))))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     f.pack(); 
     f.setVisible(true); 
    } 

} 

वैसे, इस में सामग्री फलक एक कंटेनर नहीं किया जा रहा परिणाम देगा। यदि आप इसमें चीजों को जोड़ना चाहते हैं तो आपको एक जेपीनेल को उप-वर्ग करना होगा और पेंटकंपोनेंट विधि को ओवरराइड करना होगा।

+0

असल में, जेएलएबल (सभी जेकंपोनेंट्स की तरह) कंटेनर बढ़ाता है। मुझे आश्चर्य है कि क्या होता है यदि आप किसी लेबल में कुछ जोड़ते हैं? –

+0

वास्तव में कुछ नहीं ... मैंने अभी कोशिश की है। उदाहरण के लिए आप एक JTextArea जोड़ सकते हैं लेकिन यह आकर्षित नहीं होता है। –

+0

कुछ भी नहीं दिखाई देता है क्योंकि लेबल में एक शून्य लेआउट है। लेबल के लेआउट प्रबंधक को सेट करें और आप इसमें घटक जोड़ सकते हैं। बस जागरूक रहें कि घटक का आकार अभी भी छवि के आकार से निर्धारित किया जाएगा, न कि लेबल में जोड़े गए घटक। – camickr

6

आप Background Panel कक्षा का उपयोग कर सकते हैं। यह उपरोक्त समझाया गया कस्टम पेंटिंग करता है लेकिन आपको छवि स्केल किए गए, टाइल या सामान्य आकार को प्रदर्शित करने के विकल्प प्रदान करता है। यह भी बताता है कि फ्रेम के लिए सामग्री फलक के रूप में आप छवि के साथ जेएलएबल का उपयोग कैसे कर सकते हैं।

0
import javax.swing.*; 

import java.awt.*; 

import java.awt.event.*; 

class BackgroundImageJFrame extends JFrame 
{ 

    JButton b1; 
    JLabel l1; 

    public BackgroundImageJFrame() { 

     setSize(400,400); 
     setVisible(true); 

     setLayout(new BorderLayout()); 

     JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png")); 

     add(background); 

     background.setLayout(new FlowLayout()); 

     l1=new JLabel("Here is a button"); 
     b1=new JButton("I am a button"); 

     background.add(l1); 
     background.add(b1); 
    } 

    public static void main(String args[]) 
    { 
     new BackgroundImageJFrame(); 
    } 
} 

जांच नीचे दिए गए लिंक

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html

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