में पृष्ठभूमि छवियों को सेट करना JFrame
में पृष्ठभूमि के रूप में छवि सेट करने के लिए कोई भी तरीका उपलब्ध है?JFrame
JFrame
उत्तर
कोई अंतर्निहित विधि नहीं है, लेकिन इसे करने के कई तरीके हैं। इस समय के बारे में मैं सोच सकता हूं कि सबसे सरल तरीका यह है:
JComponent
का उप-वर्ग बनाएं।- उस छवि को पेंट करने के लिए
paintComponent(Graphics g)
विधि को ओवरराइड करें जिसे आप प्रदर्शित करना चाहते हैं। इस सबक्लास होने के लिए - Set the content pane
JFrame
।
कुछ नमूना कोड:
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
फिट करने के लिए छवि का आकार बदलने के हैंडल नहीं करता, यदि आप चाहते थे कि।
इस प्रयास करें:
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);
}
}
वैसे, इस में सामग्री फलक एक कंटेनर नहीं किया जा रहा परिणाम देगा। यदि आप इसमें चीजों को जोड़ना चाहते हैं तो आपको एक जेपीनेल को उप-वर्ग करना होगा और पेंटकंपोनेंट विधि को ओवरराइड करना होगा।
असल में, जेएलएबल (सभी जेकंपोनेंट्स की तरह) कंटेनर बढ़ाता है। मुझे आश्चर्य है कि क्या होता है यदि आप किसी लेबल में कुछ जोड़ते हैं? –
वास्तव में कुछ नहीं ... मैंने अभी कोशिश की है। उदाहरण के लिए आप एक JTextArea जोड़ सकते हैं लेकिन यह आकर्षित नहीं होता है। –
कुछ भी नहीं दिखाई देता है क्योंकि लेबल में एक शून्य लेआउट है। लेबल के लेआउट प्रबंधक को सेट करें और आप इसमें घटक जोड़ सकते हैं। बस जागरूक रहें कि घटक का आकार अभी भी छवि के आकार से निर्धारित किया जाएगा, न कि लेबल में जोड़े गए घटक। – camickr
आप Background Panel कक्षा का उपयोग कर सकते हैं। यह उपरोक्त समझाया गया कस्टम पेंटिंग करता है लेकिन आपको छवि स्केल किए गए, टाइल या सामान्य आकार को प्रदर्शित करने के विकल्प प्रदान करता है। यह भी बताता है कि फ्रेम के लिए सामग्री फलक के रूप में आप छवि के साथ जेएलएबल का उपयोग कैसे कर सकते हैं।
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
आप super.paintComponents का उपयोग करना चाहिए() painComponent विधि करने के लिए विधि। – Sajad