2012-08-10 95 views
5

我是一个开始的程序员,并且正在构建一个带有按钮和滚动条的简单窗口。当我编译我的代码时,我的按钮上的文本被elipsis截断,图像图标不显示。我试图在eclipse和NetBeans中编译它。为了解决我试过的问题JButton文本和图像图标被省略号

.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 2012-08-10 16:25:54

+0

希望我的这个[答](http://stackoverflow.com/a/9866659/1057230)能够为你解决图片问题。这里有一个[示例](http://stackoverflow.com/a/11428289/1057230)供您快速参考:-)如果您不使用IDE的话,那么这个[回答](http:// stackoverflow。 com/a/11372350/1057230)可能会告诉您,您的图像相对于您的类文件的放置位置。 – 2012-08-10 16:28:08

回答

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

所以是位于图片与jar相同的目录(在NetBeans中,它们可以位于主项目目录中)? 如果它们位于罐子中,则需要使用以下方法对它们进行分割:getResourceAsStream,其中包含相对于当前软件包的图像的正确路径。

我会建议你总是用你的罐子打包你的图片,少些问题(在NetBeans上只需将图像拖放到当前的类包中,然后访问它们,然后简单地使用确切的名称(区分大小写)通过检索它的getResourceAsStream

+1

JAR部分的+1 :-),从来没有使用过'getResourceAsStream()',但今天有一些关于你的提示:-) – 2012-08-10 17:02:59

4
  • 你的意思是

enter image description here

从代码

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对于你很久以前教给我的东西,***使用INBUILD图标* ** :-) – 2012-08-10 17:02:06

+2

高兴地看到你在这里,你失去了你的动物战争名称:-) ??? .... – mKorbel 2012-08-10 17:08:40

+0

+1是的,我试图记住内置的图标,所以我只是用一个网址:) – 2012-08-10 17:09:51