将 swing jbutton 元素附加到 java 中的数组
Append swing jbutton elements to array in java
我正在开发消息传递应用程序。 GUI 是用 Java Swing 编写的。当客户端启动时,它会向我的服务器询问特定用户参与的聊天。服务器将以字符串数组的形式发送这些信息,例如:{CHAT_PATH,CHAT_PATH}
.
一旦客户端收到它,它就会将它提供给我的 GUI class,它应该在向下列出的屏幕上显示列表中的每个聊天名称(我将过滤掉路径的其余部分)。这就是我的问题所在。我首先创建一个 JButton
列表:
JButton[] chat_names = {};
然后我遍历聊天列表 (chat_data) 并在我的 chat_names 列表中为每个聊天名称添加一个新的 JButton。像这样:
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
。
在这里您创建了一个长度为 0 的 JButton 数组
JButton[] chat_names = {};
您可以致电
chat_names = new JButton[chat_data.length];
在 for-loops
之前或创建
List<JButton> chatNames = new ArrayList<>();
具有可变长度的按钮列表
提示使用 camelCase
而不是 snake_case
作为变量和方法,因为那是 convention.
还有一件事不要手动指定每个 JButton
的边界,而是在尝试 运行 在不同的计算机或不同的显示器上使用适当的 Layout Manager for example GridLayout or BoxLayout may work. If you insist on using setBounds
and (more than surely) null-layout
you may find yourself in a problem similar to .
您还可以合并这两个循环:
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]);
}
我正在开发消息传递应用程序。 GUI 是用 Java Swing 编写的。当客户端启动时,它会向我的服务器询问特定用户参与的聊天。服务器将以字符串数组的形式发送这些信息,例如:{CHAT_PATH,CHAT_PATH}
.
一旦客户端收到它,它就会将它提供给我的 GUI class,它应该在向下列出的屏幕上显示列表中的每个聊天名称(我将过滤掉路径的其余部分)。这就是我的问题所在。我首先创建一个 JButton
列表:
JButton[] chat_names = {};
然后我遍历聊天列表 (chat_data) 并在我的 chat_names 列表中为每个聊天名称添加一个新的 JButton。像这样:
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
。
在这里您创建了一个长度为 0 的 JButton 数组
JButton[] chat_names = {};
您可以致电
chat_names = new JButton[chat_data.length];
在 for-loops
之前或创建
List<JButton> chatNames = new ArrayList<>();
具有可变长度的按钮列表
提示使用 camelCase
而不是 snake_case
作为变量和方法,因为那是 convention.
还有一件事不要手动指定每个 JButton
的边界,而是在尝试 运行 在不同的计算机或不同的显示器上使用适当的 Layout Manager for example GridLayout or BoxLayout may work. If you insist on using setBounds
and (more than surely) null-layout
you may find yourself in a problem similar to
您还可以合并这两个循环:
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]);
}