我正在開發訊息傳遞應用程式。GUI 是用 Java Swing 撰寫的。當客戶端啟動時,它向我的服務器詢問特定用戶參與的聊天。服務器將以字串陣列的形式發送這些,例如:{CHAT_PATH,CHAT_PATH}。
一旦客戶端收到它,它就會將它提供給我的 GUI 類,該類應該在向下列出的螢屏上顯示串列中的每個聊天名稱(我將過濾掉路徑的其余部分)。這就是我的問題所在。我首先創建一個JButton串列:
JButton[] chat_names = {};
然后我遍歷聊天串列 (chat_data) 并將每個聊天名稱的新 JButton 添加到我的 chat_names 串列中。像這樣:
for (int x=0; x<chat_data.length-1; x ){
chat_names[x] = new JButton(chat_data[x]);
chat_names[x].setBounds(100,100,100,100);
}
for (int x=0; x<chat_names.length; x ){
frame.add(chat_names[x]);
}
當我這樣做時,我收到以下語法錯誤:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of
bounds for length 0
at gui_main.menu_screen(gui_main.java:16)
at Main.main(Main.java:89)
有誰知道這是否可以修復,或者我可以通過其他方式顯示一個按鈕串列,每個按鈕上都有一個chat_name。
uj5u.com熱心網友回復:
在這里,您創建了一個長度為 0 的 JButton 陣列
JButton[] chat_names = {};
你可以打電話
chat_names = new JButton[chat_data.length];
在for-loops或創建之前
List<JButton> chatNames = new ArrayList<>();
有一個可變長度的按鈕串列
作為提示使用camelCase而不是snake_case用于您的變數和方法,因為這是約定。
還有一件事不要手動指定 each 的邊界JButton,而是使用適當的布局管理器,例如GridLayout或BoxLayout可能作業。如果您堅持使用setBoundsand(肯定是)null-layout,當您嘗試在不同的計算機或不同的顯示幕上運行它時,您可能會發現自己遇到與此類似的問題。
您還可以合并這兩個回圈:
for (int x=0; x<chat_data.length-1; x ){
chat_names[x] = new JButton(chat_data[x]);
chat_names[x].setBounds(100,100,100,100);
}
for (int x=0; x<chat_names.length; x ){
frame.add(chat_names[x]);
}
合二為一,減少對所有聊天的一次迭代,從而提高性能:
for (int x=0; x<chat_data.length-1; x ){
chat_names[x] = new JButton(chat_data[x]);
chat_names[x].setBounds(100,100,100,100); //Use a layout manager!
frame.add(chat_names[x]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/390139.html
上一篇:如何正確實作介面?
下一篇:Java如何記錄設定輸入
