2012-10-06 3 views
5

मेरे मित्र ने मेरे द्वारा किए गए कार्यक्रम के लिए पृष्ठभूमि बनाई थी ताकि यह इतना सादा न लगे, और मैंने सोचा कि छवियों को रखने का सबसे अच्छा तरीका होगा जेएलएबल बनाने के लिए, इसे एक छवि के साथ भरें, और इसे स्क्रीन के आकार में सेट करें। यह ठीक काम करता है, सिवाय इसके कि जेएफआरएएम के आसपास एक छोटी सी सीमा है और मुझे फ्रेम के किनारों को छूने के लिए जेएलएबल नहीं मिल सकता है। विचार? मैंने एक तस्वीर संलग्न की है।एक छवि को स्पर्श करने के लिए जेएफआरएम सीमा को कैसे निकालें एज

Border Problem

public class ProgramDriver extends JFrame { 

private JPanel contentPane; 
private static CardLayout cardLayout; 
private JTextField addGradeN; 
private JTextField addGradeD; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       ProgramDriver frame = new ProgramDriver(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

//Global Variables 
... 
    manager = new StateManager(gb); 

    //JFrame Settings 
    setTitle("Grade Book"); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    setBounds(100, 100, 656, 530); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    cardLayout = new CardLayout(0,0); 
    contentPane.setLayout(cardLayout); 
    setResizable(false); 

    //Home Panel 
    final JPanel Home = new JPanel(); 
    contentPane.add(Home, "Home"); 
    Home.setLayout(null); 

    JButton btnSeeGrades = new JButton("See Grades"); 
    ... 

    //Grades Panel 
    JPanel Grades = new JPanel(); 
    contentPane.add(Grades, "Grades"); 
    Grades.setLayout(null);' 
+0

क्या आप वाकई स्क्रीन के मिलान से मेल खाते हैं? क्या आप छवि को विस्तार या अनुबंध करने की इजाजत दे रहे हैं? एक [एसएससीई] (http://sscce.org) बनाने और पोस्ट करने पर विचार करें जो हमारे लिए आपकी समस्या का प्रदर्शन करता है। –

+0

'जेएलएबल पृष्ठभूमि = नया जेएलएबल ("नया लेबल"); \t \t background.setIcon (नया ImageIcon (ProgramDriver.class.getResource ("/ चित्र/GB_Blue.jpg")); \t \t background.setBounds (0, 0, 652, 496); \t \t प्राथमिकताएं (पृष्ठभूमि); ' – flyinghigh

+0

कृपया टिप्पणियों में कोड पोस्ट न करें क्योंकि वे अपठनीय के करीब हैं। इसे अपने प्रश्न के संपादन के रूप में पोस्ट करें। लेकिन ऐसा लगता है कि आपके द्वारा पोस्ट किया गया कोड * छवि * का विस्तार नहीं कर रहा है, इसलिए मुझे कोई आश्चर्य नहीं है कि आपके पास सीमा है। इंग्लैंड का जवाब शायद सबसे अच्छा काम करेगा, उसके लिए 1+। –

उत्तर

3

Eng.Fouad के उत्तर पर विस्तार करने के लिए, आप drawImage(...) विधि का उपयोग करना चाहेंगे जो 6 पैरामीटर, छवि, एक्स और वाई स्थान, छवि चौड़ाई और ऊंचाई, और छवि पर्यवेक्षक लेता है, और इसे इस तरह से आकर्षित करता है JPanel:

g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 

उदाहरण के लिए, मेरी sscce:

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class ExpandingImage extends JPanel { 
    public static final String GUITAR = "http://duke.kenai.com/Oracle/OracleStrat.png"; 
    BufferedImage img; 

    public ExpandingImage(String imgUrlPath) throws IOException { 
     URL imgUrl = new URL(imgUrlPath); 
     img = ImageIO.read(imgUrl); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (img != null) { 
     g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
     } 
    } 


    private static void createAndShowGui() { 
     ExpandingImage mainPanel; 
     try { 
     mainPanel = new ExpandingImage(GUITAR); 
     JFrame frame = new JFrame("ExpandingImage"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     frame.setVisible(true); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

संपादित
मैं देख रहा हूँ कि आप सामग्री के चारों ओर एक EmptyBorder उपयोग कर रहे हैं फलक। क्यों नहीं यदि आप नहीं चाहते कि यह सीमा मौजूद हो?

+0

धन्यवाद, इसे आजमाएं। मैं BufferedImage फ़ाइल को कैसे बना सकता हूं। मेरे पास पैकेज में एक है। – flyinghigh

+0

@ user1419623: आप ImageIO.read का उपयोग कर सकते हैं जो इनपुटस्ट्रीम ले सकता है, और आप 'getClass()। GetResourceAsStream (pathToImage)' कॉल करके फ़ाइल को इनपुटस्ट्रीम के रूप में प्राप्त कर सकते हैं। ध्यान दें कि pathToImage क्लास फ़ाइलों के सापेक्ष होगा। यह बहुत महत्वपूर्ण है। –

+0

मैं थोड़ा उलझन में हूं कि आपका उदाहरण प्रारूप मेरे प्रारूप के साथ कैसे फिट बैठता है। मैंने अपने कोड को केवल आवश्यक लाइनों (स्पष्ट रूप से) के साथ पोस्ट किया है, जैसा कि आप देख सकते हैं कि मैं मूल रूप से पैनल और पैनल और पैनल बना रहा हूं ... – flyinghigh

2

एक विकल्प के रूप में, आप विधि JPanel की paintComponent(Graphics g) (contentPane) को ओवरराइड और this example में के रूप में Graphics वस्तु g पर drawImage() उपयोग कर सकते हैं।

+0

क्या यह मुझे अनुमति देगा सीमा से बचें? – flyinghigh

1

क्या आपने JFrame फ़ंक्शन सेट को रद्द करने की कोशिश की है()?

+0

लेकिन यह विंडो के शीर्ष पर बटन को दूर ले जाएगा ... –

+0

ऐसा नहीं करता है। – flyinghigh

3

समस्या JFrame के साथ नहीं है, समस्या आपके कोड के साथ है। हम क्या गलत है या आप कुछ उदाहरण कोड पोस्ट कर सकते हैं यह अनुमान लगाने के लिए हम अपने बाकी प्राकृतिक जीवन व्यतीत कर सकते हैं।

अब यह आप पर निर्भर है, हम हम सभी को निराशा होती है, तो आप पर गलत अनुमान के बाद गलत अनुमान फेंक करने की कोशिश कर रख सकते हैं, या आप मदद कर सकते हैं हमें आपकी मदद ...

यहां दो उदाहरण मैंने किया है। पहले को JPanel के प्राथमिक सामग्री के रूप में उपयोग करता है, जहां बच्चे के घटक इस पर रखे जाते हैं। अच्छा और सरल

दूसरा कस्टम JPanel का उपयोग करता है जो छवि को पृष्ठभूमि की पृष्ठभूमि पर चित्रित करता है। मैं फिर फ्रेम सामग्री फलक को बदलने के लिए इसका उपयोग करता हूं। यह एक छोटे से अधिक शामिल है, लेकिन इसके बारे में आसानी से अद्यतन किया गया अतिरिक्त लाभ (सामग्री फलक की जगह कार्यक्रम के बाकी असर नहीं होगा)

उदाहरण 1 है: JLabel पृष्ठभूमि

JLabel as background

रूप में इस्तेमाल किया
public class TestBackground { 

    public static final String BACKGROUND_PATH = "/Volumes/Macintosh HD2/Dropbox/MT015.jpg"; 

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

    public TestBackground() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setLayout(new BorderLayout()); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new LabelPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

      } 
     }); 

    } 

    protected class LabelPane extends JPanel { 

     public LabelPane() { 

      BufferedImage bg = null; 
      try { 
       bg = ImageIO.read(new File(BACKGROUND_PATH)); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 

      JLabel label = new JLabel(new ImageIcon(bg)); 
      setLayout(new BorderLayout()); 

      add(label); 

      label.setLayout(new GridBagLayout()); 

      JLabel lblMessage = new JLabel("Look at me!"); 
      lblMessage.setForeground(Color.WHITE); 
      lblMessage.setFont(lblMessage.getFont().deriveFont(Font.BOLD, 48)); 

      label.add(lblMessage); 

     } 
    } 
} 

उदाहरण 2: छवि पृष्ठभूमि के रूप में प्रयोग किया जाता है, सामग्री फलक की जगह ...

Background Content Pane

public class TestBackground { 
    public static final String BACKGROUND_PATH = "/Volumes/Macintosh HD2/Dropbox/MT015.jpg"; 

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

    public TestBackground() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setLayout(new BorderLayout()); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setContentPane(new BackgroundPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    protected class BackgroundPane extends JPanel { 

     private BufferedImage bg = null; 

     public BackgroundPane() { 
      try { 
       bg = ImageIO.read(new File(BACKGROUND_PATH)); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 

      setLayout(new GridBagLayout()); 

      JLabel lblMessage = new JLabel("Look at me!"); 
      lblMessage.setForeground(Color.WHITE); 
      lblMessage.setFont(lblMessage.getFont().deriveFont(Font.BOLD, 48)); 

      add(lblMessage); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(1153, 823); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (bg != null) { 
       g.drawImage(bg, 0, 0, this); 
      } 
     } 
    } 
} 
0

फ़्रेम को निर्विवाद बनाएं। frame.setUndecorated(true)

यदि आप इसे स्थानांतरित करना चाहते हैं, तो आप Java2S के ComponentMover का उपयोग कर सकते हैं।

सुनिश्चित करें कि यह दिखाई देने से पहले इसे अव्यवस्थित किया गया है।

इसके बाद, setContentPane(new JLabel(new ImageIcon("myimage.jpg")));

का उपयोग करने के बाद, यह है कि आप हमेशा की तरह सामग्री जोड़ सकते हैं।

+0

आपके ब्लॉग का लिंक प्रश्न के सटीक विषय पर नहीं है, और आप यह इंगित करने में असफल रहे हैं कि यह आपका ब्लॉग है जिसे आपने लिंक किया है। मैं लिंक को हटा रहा हूं, क्योंकि यह आपके उत्तर को समझने के लिए प्रासंगिक प्रतीत नहीं होता है। यदि आप इसे वापस जोड़ते हैं, तो आपको यह खुलासा करना होगा कि यह आपकी वेबसाइट है, और इस बारे में विवरण शामिल है कि यह * सीधे * प्रश्न के विषय से संबंधित क्यों है। –

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