我正在爲一個項目編寫一個IM客戶端GUI。在窗口的左側,我想要一個滾動窗格,其中每個活動用戶都有單選按鈕,這樣當按下新聊天按鈕時,將與選定用戶創建聊天。未出現自定義JScrollPane中的JRadioButtons?
我已經實現了3個給定用戶的示例GUI。我爲每個創建一個JRadioButton,設置一個ActionCommand和一個ActionListener,將它添加到ButtonGroup中,然後將它添加到'this',這是一個擴展JScrollPane的類。但是,當我運行代碼時,我只看到左側有一個空框,沒有按鈕。有人可以解釋嗎?相關代碼如下。
package gui;
import javax.swing.*;
public class ActiveList extends JScrollPane implements ActionListener {
private ButtonGroup group;
private String selected;
public ActiveList() {
//TODO: will eventually need access to Server's list of active usernames
String[] usernames = {"User1", "User2", "User3"};
ButtonGroup group = new ButtonGroup();
this.group = group;
for (String name: usernames) {
JRadioButton button = new JRadioButton(name);
button.setActionCommand(name);
button.addActionListener(this);
this.group.add(button);
this.add(button);
}
}
public String getSelected() {
return this.selected;
}
@Override
public void actionPerformed(ActionEvent e) {
this.selected = e.getActionCommand();
System.out.println(e.getActionCommand());
}
}
我正在運行的主要方法來自另一個類ChatGUI.java。 ConversationsPane容器是我GUI中的另一個類,它正常工作。
package gui;
import javax.swing.*;
public class ChatGUI extends JFrame {
private ConversationsPane convos;
private ActiveList users;
public ChatGUI() {
ConversationsPane convos = new ConversationsPane();
this.convos = convos;
ActiveList users = new ActiveList();
this.users = users;
GroupLayout layout = new GroupLayout(this.getContentPane());
this.getContentPane().setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addComponent(users, 100, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(convos)
);
layout.setVerticalGroup(
layout.createParallelGroup()
.addComponent(users)
.addComponent(convos)
);
}
public static void main(String[] args) {
ChatGUI ui = new ChatGUI();
ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ui.setVisible(true);
ui.setSize(800,400);
ui.convos.newChat("Chat A");
}
}
我會使用帶圖標的JList而不是JRadioButton,然後ListSelectionListner可以對JList中的選擇事件做出反應 – mKorbel 2013-05-02 05:39:34
什麼是ConversationsPane?以[SSCCE](http://sscce.org/)的形式回答。 – 2013-05-02 05:40:41