5

私は初心者のプログラマーで、ボタンとスクロールバーを備えた単純なウィンドウを作成しています。コードをコンパイルすると、ボタンのテキストが省略記号で切り取られ、画像アイコンが表示されません。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();
    }
}
4

2 に答える 2

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 では、メイン プロジェクト ディレクトリにある可能性があります)。getResourceAsStreamjar にある場合は、現在のパッケージに関連するイメージを含むパッケージへの正しいパスを使用して、それらを抽出する必要があります。

問題が少ないように、常に画像をjarファイルにパックすることをお勧めします(netbeansでこれを行うには、画像にアクセスするクラスの現在のパッケージに画像をドラッグアンドドロップし、正確な名前(大文字と小文字を区別)を使用して取得しますのgetResourceAsStream

于 2012-08-10T16:37:38.880 に答える
4
  • ということですか

ここに画像の説明を入力

コードから

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();
            }
        });
    }
}
于 2012-08-10T16:53:18.713 に答える