2012-08-10 15 views
5

Sono un programmatore in fase di sviluppo e sto costruendo una semplice finestra con pulsanti e una barra di scorrimento. Quando compilo il mio codice, il testo sui miei pulsanti è troncato da un'elegia e l'icona dell'immagine non viene visualizzata. Ho provato a compilarlo sia in eclipse che in NetBeans. Per risolvere il problema ho cercatoJButton testo e icona immagine sono tagliati con ellissi

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

.setPreferedSize 

adding padding (I forgot the code for this) 

.setBounds 

e praticamente tutto il resto che ho inciampato su su internet. Nessuno di questi ha risolto il mio problema e non riesco a visualizzare il testo e le immagini nei pulsanti.

Il mio codice:

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 bella domanda, benvenuto su SO forum – mKorbel

+0

Speriamo che questa [risposta] (http://stackoverflow.com/a/9866659/1057230) della mia sarà in grado di risolvere il problema dell'immagine per voi. Ed ecco un altro [esempio] (http://stackoverflow.com/a/11428289/1057230) per il tuo riferimento rapido :-) Se non utilizzerai IDE, allora questa [risposta] (http: // StackOverflow. it/a/11372350/1057230) potrebbe indicarti dove posizionare le tue immagini rispetto ai tuoi file di classe. –

risposta

4

Ci deve essere un problema con le posizioni di voi le immagini come questa (immagine URL utilizzato) che bene funziona:

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(); 
    } 
} 

lo sono anche le immagini situate nella stessa directory del jar (nei netbeans si possono trovare nella directory principale del progetto)? Se si trovano nel barattolo, è necessario esportarli utilizzando: getResourceAsStream con il percorso corretto del pacchetto che contiene le immagini relative al pacchetto corrente.

Raccomanderei sempre di riempire le immagini con i vasi, meno problemi (per fare ciò su netbeans basta trascinare e rilasciare le immagini nel pacchetto corrente della classe che le accederà quindi utilizzare semplicemente il nome esatto (distinzione tra maiuscole e minuscole) a recuperarlo utilizzando il getResourceAsStream

+1

+1 per la parte JAR :-), mai usato 'getResourceAsStream()', ma oggi ho alcuni suggerimenti riguardo lo stesso da te :-) –

4
  • vuoi dire

enter image description here

dal codice

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 per qualcosa che mi hai insegnato molto tempo fa, *** USING INBUILD Icons * ** :-) –

+2

felice di vederti qui, dove hai perso il nome della tua guerra degli animali :-) ??? .... – mKorbel

+0

+1 sì Stavo cercando di ricordare le icone incorporate così ho appena usato un url :) –

Problemi correlati