0

曲のライブラリがありますが、曲に関するその他の情報を右側に表示したいので、この選択リストをウィンドウの左側にのみ表示したいと思います。JScrollPaneの中にあるのサイズを変更する方法がわかりませんJFrame

このライブラリでは、ファイルに保存されている曲を自分の曲ライブラリにインポートできるようにしたいと考えています。現在、コード内に配列がありますが、このアプローチを使用する代わりに、テキストファイルから読み取れるようにしたいと考えています。ファイルに、曲に関するアーティストとアルバムの情報を保存できるようにしたいのですが、曲リストに表示したくありません。

    String songs[] = {"Song1", "Song2", "Song3", "Song4", "Song5"};
    JList list = new JList(songs);

    public SongLib(){

        JFrame songLibrary = new JFrame("Song Library");
        songLibrary.setLocationRelativeTo(null);
        songLibrary.setResizable(true);
        songLibrary.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        list.addListSelectionListener(new ListSelectionListener(){
            public void valueChanged(ListSelectionEvent evt){
                int i = list.getSelectedIndex();
                if (i != -1)
                    System.out.println("Selected: " + songs[i]);
                else
                    System.out.println("Choose a song");    
            }
        });

        JScrollPane JSPane = new JScrollPane(list);
        JSPane.setPreferredSize(new Dimension(100,100));
        songLibrary.add(JSPane);
        songLibrary.setSize(400,400);
        songLibrary.setVisible(true);
    }

    public static void main(String[] args){
        new SongLib();
    }
4

3 に答える 3

4
  1. (あなたの人生の残りの間)電話をやめなさいsetPreferredSize()。この呼び出しを意味します:JSPane.setPreferredSize(new Dimension(100,100));間違いなく削除する必要があります。
  2. 2つのパネルをドラッグ可能なセパレーターと並べて配置する場合は、を使用しますJSplitPane。ドラッグ可能な仕切りが必要ない場合は、適切なaを使用してください(JPanel適切な選択である可能性があります)LayoutManagerGridBagLayout
  3. ファイルからの読み取りは非常に簡単です。SOで検索するだけで、何百もの応答が見つかります。csvファイルを解析したい場合は、そのために役立つライブラリがいくつかあります。最終的に、これをしばらくの間アプリケーションにすることを検討すると、単純なテキストファイルよりも情報の読み取り/保存/検索ではるかに優れた仕事をする小さな純粋なJavaの埋め込み可能なデータベースがいくつかあります。
  4. Javaの命名規則を学び、それらに固執します。変数は常に小文字で始まります。
于 2013-02-10T19:42:50.723 に答える
3

@Guillaume Polet の良いアドバイスに加えて、今後setVisibleRowCount()役に立つかもしれません。

画像

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/** @see https://stackoverflow.com/a/14801908/230513 */
public class SongLib {

    String songs[] = {"Song1", "Song2", "Song3", "Song4", "Song5"};
    JList list = new JList(songs);

    public SongLib() {

        JFrame songLibrary = new JFrame("Song Library");
        songLibrary.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        list.setVisibleRowCount(4);
        list.addListSelectionListener(new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent evt) {
                int i = list.getSelectedIndex();
                if (i != -1) {
                    System.out.println("Selected: " + songs[i]);
                } else {
                    System.out.println("Choose a song");
                }
            }
        });

        JScrollPane JSPane = new JScrollPane(list);
        songLibrary.add(JSPane);
        songLibrary.pack();
        songLibrary.setLocationRelativeTo(null);
        songLibrary.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new SongLib();
            }
        });
    }
}
于 2013-02-10T19:51:45.790 に答える
1

1.については、Javaでのレイアウト、特にGridBagLayoutを見てください。 http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

2の場合:ファイルからの読み取りおよびファイルへの書き込みは、File-ObjectsおよびInout/Output-Streamsを使用して行われます。しかし、これはこれを行うための非常に低レベルの方法です。XMLファイルの使用を検討する必要があると思います。JAXBを見てください

于 2013-02-10T19:42:45.807 に答える