2012-08-10 7 views
5

Ich bin ein beginnender Programmierer und baue ein einfaches Fenster mit Tasten und einer Bildlaufleiste. Wenn ich meinen Code kompiliere, wird der Text auf meinen Tasten mit einer Elipsis abgeschnitten und das Bildsymbol wird nicht angezeigt. Ich habe versucht, es in Eclipse und NetBeans zu kompilieren. Zur Lösung des Problems ichJButton Text und Bildsymbol sind mit Elipsis abgeschnitten

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

.setPreferedSize 

adding padding (I forgot the code for this) 

.setBounds 

und so ziemlich alles andere, was ich habe im Internet gestolpert. Keiner von diesen löste mein Problem und ich kann den Text und die Bilder in den Knöpfen nicht sehen.

Mein Code:

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 nette Frage, willkommen auf SO-Forum – mKorbel

+0

Hoffentlich wird dies [Antwort] (http://Stackoverflow.com/a/9866659/1057230) von mir in der Lage, das Bild Problem für Sie zu sortieren. Und hier ist eine weitere [Beispiel] (http://stackoverflow.com/a/11428289/1057230) für Ihre Kurzreferenz :-) Wenn Sie nicht IDEs verwenden, dann diese [Antwort] (http: // stackoverflow. com/a/11372350/1057230) kann Ihnen sagen, wo Sie Ihre Bilder in Bezug auf Ihre Klassendateien platzieren müssen. –

Antwort

4

Es muss ein Problem mit den Standorten Sie Bilder sein, da dies gerade fein (verwendet URL Bild) funktioniert:

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

So sind die Bilder in der Lage das selbe Verzeichnis wie das jar (in netbeans können sie sich im Hauptverzeichnis des Projekts befinden)? Wenn Sie sich im Glas befinden, müssen Sie sie mit folgendem Befehl extrahieren: getResourceAsStream mit dem korrekten Pfad zum Paket, das die Bilder enthält, die sich auf das aktuelle Paket beziehen.

Ich würde immer empfehlen, Ihre Bilder mit Ihren Gläsern zu verpacken, weniger Probleme (um dies auf Netbeans zu tun ziehen Sie einfach die Bilder in Ihrem aktuellen Paket der Klasse, die dann zugreifen Sie einfach den genauen Namen verwenden (Groß-/Kleinschreibung beachten) zurückzuholen es die getResourceAsStream

+1

+1 für den JAR-Teil :-), nie benutzt 'getResourceAsStream()', aber habe heute noch ein paar Tipps von dir :-) –

4
  • meinen verwenden Sie

enter image description here

von Code

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

+1 für etwas, was du mir vor langer Zeit beigebracht hast, *** INBUILD Icons verwenden * ** :-) –

+2

froh, dich hier zu sehen, wo du deinen Tierkriegsnamen verloren hast :-) ??? .... – mKorbel

+0

+1 ja Ich habe versucht, mich an die eingebauten Icons zu erinnern, also habe ich nur eine URL verwendet :) –