2012-08-10 22 views
5

के साथ काट दिया गया है मैं एक शुरुआती प्रोग्रामर हूं और बटन और स्क्रॉलबार के साथ एक साधारण विंडो बना रहा हूं। जब मैं अपना कोड संकलित करता हूं, तो मेरे बटन पर टेक्स्ट को एलिप्सिस के साथ काटा जाता है और छवि आइकन नहीं दिखाया जाता है। मैंने इसे ग्रहण और नेटबीन दोनों में संकलित करने का प्रयास किया है। समस्या को हल करने के लिए मैंनेजेबटन टेक्स्ट और छवि आइकन elipsis

.setMargin(new Insets(0, 0, 0, 0)); 

.setPreferedSize 

adding padding (I forgot the code for this) 

.setBounds 

और इंटरनेट पर जो कुछ भी मैंने ठोकर खाई है, उतनी ही कोशिश की है। इनमें से कोई भी मेरी समस्या हल नहीं करता है और मैं बटन में टेक्स्ट और छवियों को नहीं देख सकता।

मेरे कोड:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class FeedBar2 extends JFrame { 

    public FeedBar2() { 
     super("FeedBar 2"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // create icons 
     ImageIcon loadIcon = new ImageIcon("load.gif"); 
     ImageIcon saveIcon = new ImageIcon("save.gif"); 
     ImageIcon subscribeIcon = new ImageIcon("subscribe.gif"); 
     ImageIcon unsubscribeIcon = new ImageIcon("unsubscribe.gif"); 
     // create buttons 
     JButton load = new JButton("Load", loadIcon); 
     JButton save = new JButton("Save", saveIcon); 
     JButton subscribe = new JButton("Subscribe", subscribeIcon); 
     JButton unsubscribe = new JButton("Unsubscribe", unsubscribeIcon); 
     // add buttons to toolbar 
     JToolBar bar = new JToolBar(); 
     bar.add(load); 
     bar.add(save); 
     bar.add(subscribe); 
     bar.add(unsubscribe); 
     // create menu 
     JMenuItem j1 = new JMenuItem("Load"); 
     JMenuItem j2 = new JMenuItem("Save"); 
     JMenuItem j3 = new JMenuItem("Subscribe"); 
     JMenuItem j4 = new JMenuItem("Unsubscribe"); 
     JMenuBar menubar = new JMenuBar(); 
     JMenu menu = new JMenu("Feeds"); 
     menu.add(j1); 
     menu.add(j2); 
     menu.addSeparator(); 
     menu.add(j3); 
     menu.add(j4); 
     menubar.add(menu); 
     // prepare user interface 
     JTextArea edit = new JTextArea(8, 40); 
     JScrollPane scroll = new JScrollPane(edit); 
     BorderLayout bord = new BorderLayout(); 
     setLayout(bord); 
     add("North", bar); 
     add("Center", scroll); 
     setJMenuBar(menubar); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] arguments) { 
     FeedBar2 frame = new FeedBar2(); 
    } 
} 
+0

+1 अच्छा सवाल, SO मंच – mKorbel

+0

पर आपका स्वागत है उम्मीद है कि यह [उत्तर] (http://stackoverflow.com/a/9866659/1057230) मेरा आपके लिए छवि समस्या को हल करने में सक्षम होगा। और यहां एक और [उदाहरण] (http://stackoverflow.com/a/11428289/1057230) आपके त्वरित संदर्भ के लिए है :-) यदि आप आईडीई का उपयोग नहीं करेंगे, तो यह [उत्तर] (http: // stackoverflow। कॉम/ए/11372350/1057230) आपको बता सकता है कि आपकी छवियों को अपनी कक्षा फ़ाइलों के संबंध में कहां रखा जाए। JAR भाग के लिए –

उत्तर

4

आप छवियों के स्थानों के साथ एक समस्या होना चाहिए के रूप में इस ठीक (URL का उपयोग किया छवि) काम करता है:

import java.awt.BorderLayout; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JToolBar; 

public class FeedBar2 extends JFrame { 

    public FeedBar2() { 
     super("FeedBar 2"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // create icons 
     ImageIcon loadIcon = null; 
     try { 
      loadIcon = new ImageIcon(new URL("http://t0.gstatic.com/images?q=tbn:ANd9GcRQgmCgdCMtXO6db7pX4UwzdvJY9-r8kI2zwE5A6c3VqB9eOR2Pe8gpqQBdeg")); 
     } catch (MalformedURLException ex) { 
      Logger.getLogger(FeedBar.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     // create buttons 
     JButton load = new JButton("load", loadIcon); 
     // add buttons to toolbar 
     JToolBar bar = new JToolBar(); 
     bar.add(load); 
     BorderLayout bord = new BorderLayout(); 
     setLayout(bord); 
     add("North", bar); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] arguments) { 
     FeedBar2 frame = new FeedBar2(); 
    } 
} 

तो में स्थित तस्वीरें हैं जार के समान निर्देशिका (netbeans में वे मुख्य परियोजना निर्देशिका में स्थित हो सकता है)? यदि जार में स्थित हैं तो आपको पैकेज के सही पथ के साथ getResourceAsStream का उपयोग करके उन्हें निकालने की आवश्यकता होगी जिसमें वर्तमान पैकेज से संबंधित छवियां हैं।

मैं हमेशा अपने जारों के साथ अपनी छवियों को पैक करने की सलाह दूंगा, कम समस्याएं (नेटबीन्स पर ऐसा करने के लिए बस कक्षा के अपने वर्तमान पैकेज में छवियों को खींचें और छोड़ें जो उन्हें एक्सेस करेंगे, फिर सटीक नाम (केस संवेदनशील) का उपयोग कर इसे पुनः प्राप्त करने getResourceAsStream

+1

+1 :-), कभी भी 'getResourceAsStream() 'का उपयोग नहीं किया गया है, लेकिन आज आपसे कुछ सुझाव प्राप्त हुए हैं :-) –

4
  • आप मतलब है

enter image description here

  • आम मुद्दा है कि Icon/ImageIcon मामले null value है तो आप उसे null value के लिए परीक्षण करने के लिए है में किसी भी अपवाद वापस जाने के लिए कभी नहीं,

  • वहाँ कुछ विषय How to load Image compiled into Java package

कोड से हो रहा है

import java.awt.*; 
import javax.swing.*; 

public class FeedBar2 extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Icon loadIcon = UIManager.getIcon("OptionPane.errorIcon"); 
    private Icon saveIcon = UIManager.getIcon("OptionPane.informationIcon"); 
    private Icon subscribeIcon = UIManager.getIcon("OptionPane.warningIcon"); 
    private Icon unsubscribeIcon = UIManager.getIcon("OptionPane.questionIcon"); 

    public FeedBar2() { 
     super("FeedBar 2"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // create icons 
     /*ImageIcon loadIcon = new ImageIcon("load.gif"); 
     ImageIcon saveIcon = new ImageIcon("save.gif"); 
     ImageIcon subscribeIcon = new ImageIcon("subscribe.gif"); 
     ImageIcon unsubscribeIcon = new ImageIcon("unsubscribe.gif");*/ 
     // create buttons 
     JButton load = new JButton("Load", loadIcon); 
     JButton save = new JButton("Save", saveIcon); 
     JButton subscribe = new JButton("Subscribe", subscribeIcon); 
     JButton unsubscribe = new JButton("Unsubscribe", unsubscribeIcon); 
     // add buttons to toolbar 
     JToolBar bar = new JToolBar(); 
     bar.add(load); 
     bar.add(save); 
     bar.add(subscribe); 
     bar.add(unsubscribe); 
     // create menu 
     JMenuItem j1 = new JMenuItem("Load"); 
     JMenuItem j2 = new JMenuItem("Save"); 
     JMenuItem j3 = new JMenuItem("Subscribe"); 
     JMenuItem j4 = new JMenuItem("Unsubscribe"); 
     JMenuBar menubar = new JMenuBar(); 
     JMenu menu = new JMenu("Feeds"); 
     menu.add(j1); 
     menu.add(j2); 
     menu.addSeparator(); 
     menu.add(j3); 
     menu.add(j4); 
     menubar.add(menu); 
     // prepare user interface 
     JTextArea edit = new JTextArea(8, 40); 
     JScrollPane scroll = new JScrollPane(edit); 
     BorderLayout bord = new BorderLayout(); 
     setLayout(bord); 
     add("North", bar); 
     add("Center", scroll); 
     setJMenuBar(menubar); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] arguments) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       FeedBar2 frame = new FeedBar2(); 
      } 
     }); 
    } 
} 
+2

+1 जो आपने मुझे बहुत पहले सिखाया था, *** अंतर्निहित आइकन का उपयोग करना * ** :-) –

+2

आपको यहां देखकर खुशी हुई, जहां आपने अपना पशु युद्ध नाम खो दिया :-) ??? .... – mKorbel

+0

+1 हाँ मैं इनबिल्ट आइकन को याद रखने की कोशिश कर रहा था इसलिए मैंने अभी एक यूआरएल इस्तेमाल किया :) –

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

  • कोई संबंधित समस्या नहीं^_^