[英]How do I resize a JScrollPane within a JFrame? And how do I read from a file in Java?
我有一个歌曲库,我希望此选择列表仅位于窗口的左侧,因为我想将有关歌曲的其他信息放在右侧。 我不确定如何更改JFrame
内部的JScrollPane
的大小。
在这个库中,我希望能够将文件中存储的歌曲导入到我的歌曲库中。 现在,我的代码中有一个数组,但是我希望能够从文本文件中读取而不是使用这种方法。 在文件中,我希望能够存储有关歌曲的艺术家和专辑信息,但是我不希望它显示在歌曲列表中。
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();
}
setPreferredSize()
。 表示此调用: JSPane.setPreferredSize(new Dimension(100,100));
应该删除。 JSplitPane
。 如果您不希望使用可拖动的分隔线,请使用带有适当LayoutManager
的JPanel
( GridBagLayout
可能是一个不错的选择) 除了@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();
}
});
}
}
对于1.,请看一下Java中的布局,尤其是GridBagLayout。 http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
对于2:使用文件对象和Inout / Output-Streams进行文件读写。 但这是一个非常低级的方法。 我认为您应该考虑使用XML文件。 看看JAXB
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.