java - JButton 文本和图像图标被省略号截断

标签 java swing jscrollpane jbutton layout-manager

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

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

最佳答案

图像的位置一定有问题,因为它工作正常(使用 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 中,它们可以位于主项目目录中)? 如果它们位于 jar 中,您将需要使用以下命令提取它们:getResourceAsStream使用正确的包路径,其中包含相对于当前包的图像。

我会建议总是用你的 jar 打包你的图像,更少的问题(要在 netbeans 上做到这一点,只需将图像拖放到你当前的类包中,这将访问它们然后简单地使用确切的名称(区分大小写)到使用 getResourceAsStream

检索它

关于java - JButton 文本和图像图标被省略号截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905626/

相关文章:

java - 最小化 GWT 应用程序的编译大小

java - 您如何找到空指针异常的确切变量?

java - Swing 布局忽略水平调整大小

java - JButtons AWT 控件 java

java - JTable 更改后 JScrollBar 不会更新其最大值

java - 在一组带组的多个限制器之间提取字符串

javascript - Struts 2 表单在不使用索引的情况下将参数绑定(bind)到集合

java - 如何在单击时动态地将 swing 组件添加到 gui 并使其永久化

java - 为什么在使用 null LayoutManager 时我的带有 JTextArea 的 JScrollPane 不可见?