2013-02-10 45 views
0

我有一个歌曲库,我希望这个选择列表只能放在窗口的左边,因为我想把右边这首歌的其他信息放在窗口的左边。我不确定如何更改JFrameJScrollPane的大小。如何在JFrame中调整JScrollPane的大小?我如何从Java中的文件读取数据?

在这个库中,我希望能够将存储在文件中的歌曲导入到我的歌曲库。现在,我的代码中有一个数组,但我希望能够从文本文件中读取数据,而不是使用此方法。在该文件中,我希望能够存储关于该歌曲的艺术家和专辑信息,但我不希望它显示在歌曲列表中。

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

[我应避免使用一套(首选|最大|最小)中的Java Swing大小的方法(http://stackoverflow.com/q/7229226/230513)? – trashgod 2013-02-10 19:53:42

+0

http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html – alnasfire 2013-02-10 19:54:58

+0

对不起,我是这个网站的新手,所以我仍然试图找出如何工作,但我只是做过某事。谢谢! – Jay 2013-02-10 20:18:10

回答

4
  1. 停止呼叫(为你的整个生命的其余部分)setPreferredSize()。意思是这个电话:JSPane.setPreferredSize(new Dimension(100,100));应该一定要删除。
  2. 如果您希望将2个面板并排放置一个可拖动的分隔符,请使用JSplitPane。如果你不想要可拖动的分隔线,使用JPanel与适当的LayoutManagerGridBagLayout可能是一个不错的选择)
  3. 从文件中读取很容易,只需搜索SO,你会发现数百个响应。如果你想分析csv文件,有一些库可以帮助你做到这一点。最终,如果您考虑将其作为应用程序一段时间,那么可以使用一些小型纯Java嵌入式数据库,它们在读取/存储/搜索信息方面比单纯的文本文件做得更好。
  4. 了解Java命名约定并遵守它们:变量始终以小写字母开头。
3

除了@Guillaume Polet的好advice,setVisibleRowCount()可能对您有所帮助。

image

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(); 
      } 
     }); 
    } 
} 
相关问题