3

私はJavaが初めてで、スタックオーバーフローも初めてです。

JMF API を利用して、Java でコーディングされた単純なメディア プレーヤーを作成しようとしています。これまでのところ、JComboBox呼び出されplayListHolderた . ユーザーがメニュー バーから [開く] を選択すると、追加したい曲を から選択しますJFileChooser。次に、メソッドをplayListHolder使用して曲ファイルが追加されます。addItem()でアイテムが選択されplayListHolder、ユーザーがplayボタンをクリックすると、File オブジェクト ファイルが を使用して再生されるアイテムに割り当てられますplayListHolder.getSelectedItem()。以下のコードのセクションと関連する変数:

File file;

Player p;

Component cont;

Container c;

Component visual;

JButton play = new JButton("Play");

play.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                file = (File) playListHolder.getSelectedItem();
                startplay();
            }
        }); 
public void openFile() { 
                JFileChooser filech = new JFileChooser();

        int result = filech.showOpenDialog(this);

        if (result == JFileChooser.CANCEL_OPTION) {
            file = null;
        } else {
            file = filech.getSelectedFile();
            playListHolder.addItem(file);
            ;
        }
    }


public void startplay() {

        if (file == null)
            return;
        removepreviousplayer();
        try {
            p = Manager.createPlayer(file.toURI().toURL());
            p.addControllerListener(new ControllerListener() {
                public void controllerUpdate(ControllerEvent ce) {
                    if (ce instanceof RealizeCompleteEvent) {
                        c = getContentPane();
                        cont = p.getControlPanelComponent();
                        visual = p.getVisualComponent();
                        if (visual != null)
                            c.add(visual, BorderLayout.CENTER);
                        if (cont != null)
                            c.add(cont, BorderLayout.SOUTH);
                        c.doLayout();
                    }
                }
            });
            p.start();
        }

        catch (Exception e) {
            JOptionPane.showMessageDialog(this, "Invalid file or location",
                    "Error loading file", JOptionPane.ERROR_MESSAGE);

        }
    }

私がやりたいのは、で設定したJComboBoxパス全体ではなく、ファイル名だけで曲ファイルを に表示させることです。file.toString()JComboBox

今までfile.getName()箱に を入れただけだったのですが、すぐに自分の甘さに気づきました。これを行うStringと、ボックスにファイル名のplay.

また、メソッドを使用してファイル名だけを返すメソッドを持つFileWrapperクラスを作成してから、ファイル オブジェクトの代わりにそれをボックスに直接追加しようとしました。同じ結果が得られました。toString()file.getName()FileWrapper

このつまずきを作っているのは私のアマチュアレベルの知識に過ぎないことは確かです。これを行う簡単な方法が必要ですが、信じようと信じまいと、私はそれを見つけることができなかったようです。私が簡単に理解した方法。どんな助けでも大歓迎です。

4

2 に答える 2

3

これがあなたが探しているものだと思います。コンボボックスのカスタムレンダラーを作成してください

myComboBox.setRenderer( new DefaultListCellRenderer(){

        @Override  
        public Component getListCellRendererComponent(
            JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus)
        {
            super.getListCellRendererComponent(list, value, index,
                isSelected, cellHasFocus);
                if(value == null){
                     return this;    
                }

                if(value instanceof File){
                  File song = (File)value;
                  setText(song.getName());
                }else{
                  setText(value.toString());
                }
            return this;
        }
});

続きを読むComboBox の使い方

于 2013-11-12T02:17:57.877 に答える
1

画面上のコンテンツのフォーマットは、多くの場合、レンダラーにかかっています。この場合、ListCellRenderer.

コンボ ボックスの使用方法と、特にカスタム レンダラーの提供をご覧ください。

于 2013-11-12T02:18:09.067 に答える