我正在将Arraylist中的JLabel添加到JPanel中,只有我在面板上设置了布局才会显示,但我想在尝试panel = new JPanel(null);
时自己设置标签的位置所有标签都不会显示
框:
public static void Frame(){
panel = new JPanel(null);
JFrame frame = new JFrame("New");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
frame.setSize(400,400);
frame.add(panel);
}
向面板添加标签的ArrayList迭代
private static void printArray() {
for(int i = 0; i < food.size(); i++){
component = new JLabel(new Food(food.get(i).getColor(),
food.get(i).getIconHeight(), food.get(i).getIconWidth(),
food.get(i).getLocationX(), food.get(i).getLocationY()));
panel.add(component);
component.setLocation(food.get(i).getLocationX(),
food.get(i).getLocationY());
}
}
我可以从Debug看到它肯定是获取位置信息,所以为什么不把它放在这个位置。
答案 0 :(得分:1)
将布局设置为null的原因是我可以更新标签的位置,这样我就可以用键盘输入“移动”它
您需要做的第一件事是了解布局管理器实际执行的工作,因为如果您要删除它,您将需要接管它的工作。
布局管理器负责确定组件的大小和位置。他们通过各种方式实现这一目标,但可以使用组件的getPreferred/Minimum/MaximumSize
方法。
因此,这表明您需要对这些值做出自己的决定,例如......
component = new JLabel(new Food(food.get(i).getColor(),
food.get(i).getIconHeight(), food.get(i).getIconWidth(),
food.get(i).getLocationX(), food.get(i).getLocationY()));
component.setSize(component.getPreferredSize());
component.setLocation(food.get(i).getLocationX(), food.get(i).getLocationY());
我还建议使用Key Bindings而不是KeyListener
,它不会受到与焦点相关的问题的影响