2012-03-02 83 views
1
import java.awt.event.*; 
import java.io.File; 
import javax.swing.*; 

public class Launch extends JFrame implements ActionListener { 
private static final long serialVersionUID = 5291490384908841627L; 
JButton OK, create; 
JList<String> players; 
File player; 
public static void main(String[] args) { 
    new Launch(); 
} 
private Launch() { 
    this.setSize(600, 600); 
    this.setLocationRelativeTo(null); 
    this.setTitle("A Word Game"); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    Box box = Box.createVerticalBox(); 
    OK = new JButton("OK"); 
    create = new JButton("Create new player"); 
    OK.addActionListener(this); 
    create.addActionListener(this); 
    String[] playerList = getPlayers(); 
    players = new JList<String>(playerList); 
    players.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    JScrollPane scroll = new JScrollPane(players, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    scroll.add(players); 
    final JLabel choosePrompt = new JLabel("Choose a player."); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(choosePrompt); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(scroll); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(OK); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(create); 
    box.add(Box.createVerticalStrut(20)); 
    this.add(box); 
    this.setVisible(true); 
} 
private String[] getPlayers() { 
    File playerDirectory = new File("players"); 
    File[] playersInFiles = playerDirectory.listFiles(); 
    String[] players = new String[playersInFiles.length]; 
    for (int counter = 0; counter < playersInFiles.length; counter ++) { 
     players[counter] = trimTXT(playersInFiles[counter].getName()); 
    } 
    return players; 
} 
private String trimTXT(String original) { 
    return original.substring(0, original.length() - 4); 
} 
@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource().equals(OK)) { 
     String name = players.getSelectedValue(); 
     if (name == null) { 
      return; 
     } 
     player = new File(name + ".txt"); 
    } else if (e.getSource().equals(create)) { 
     //create a new character, all that what-not 
    } 
} 
} 

問題是玩家沒有出現在JScrollPane中。滾動窗格就在那裏,裏面沒有任何東西。我有一堆代表播放器文件夾中的播放器的空白.txt文件。他們只是爲了測試。 weid的事情是,當JList不在JScrollPane中時,它工作正常。當我將它添加到JScrollPane中時,內部的東西不會顯示出來。JList不顯示在JScrollPane裏面

+1

而我們在它:考慮到提高代碼的可讀性 - (包括格式,下面的Java命名約定,相關線路合理分組,偶爾空行作爲空白...) - 以及...加快閱讀 – kleopatra 2012-03-02 14:28:12

回答

8
import java.awt.event.*; 
import java.io.File; 
import javax.swing.*; 

public class Launch extends JFrame implements ActionListener { 
private static final long serialVersionUID = 5291490384908841627L; 
JButton OK, create; 
JList players; 
File player; 
public static void main(String[] args) { 
    new Launch(); 
} 
private Launch() { 
    // don't do this 
    this.setSize(600, 600); 
    this.setLocationRelativeTo(null); 
    this.setTitle("A Word Game"); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    Box box = Box.createVerticalBox(); 
    OK = new JButton("OK"); 
    create = new JButton("Create new player"); 
    OK.addActionListener(this); 
    create.addActionListener(this); 
    String[] playerList = getPlayers(); 
    players = new JList(playerList); 
    players.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    JScrollPane scroll = new JScrollPane(players, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    //scroll.add(players); 
    final JLabel choosePrompt = new JLabel("Choose a player."); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(choosePrompt); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(scroll); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(OK); 
    box.add(Box.createVerticalStrut(20)); 
    box.add(create); 
    box.add(Box.createVerticalStrut(20)); 
    this.add(box); 
    pack(); 
    this.setVisible(true); 
} 
private String[] getPlayers() { 
    /*File playerDirectory = new File("players"); 
    File[] playersInFiles = playerDirectory.listFiles(); 
    String[] players = new String[playersInFiles.length]; 
    for (int counter = 0; counter < playersInFiles.length; counter ++) { 
     players[counter] = trimTXT(playersInFiles[counter].getName()); 
    }*/ 
    String[] players = {"Bob", "Jane"}; 
    return players; 
} 
private String trimTXT(String original) { 
    return original.substring(0, original.length() - 4); 
} 
@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource().equals(OK)) { 
     String name = (String)players.getSelectedValue(); 
     if (name == null) { 
      return; 
     } 
     player = new File(name + ".txt"); 
    } else if (e.getSource().equals(create)) { 
     //create a new character, all that what-not 
    } 
} 
} 
+0

@PicklishDoorknob:明智地使用你的新力量。 – trashgod 2012-03-02 19:28:41

6

誤差

scroll.add(players) 
+0

+1擊敗我29秒。 ;) – 2012-03-02 14:22:56

+0

好的。謝謝。 :)安德魯湯普森::)如此接近 – Doorknob 2012-03-02 14:25:09

+0

@安德魯·湯普森懶惰我遺漏了複製代碼:-) – kleopatra 2012-03-02 14:25:13