Java Gui Gridlayout:删除某个对象并在其位置添加另一个对象
Java Gui Gridlayout: Remove certain object and add another to its position
我正在使用 Java 创建赛车游戏,但在 GUI 部分卡住了。
基本上,在我的游戏中,您掷骰子,两辆车中的一辆相应地从位置 (9,0) 移动到位置 (0,0)。谁到达 (0,0) 就是赢家。问题是游戏已经准备就绪,除了移动过程之外,一切都运行良好。我正在使用 GridLayout 向用户展示地图,地图上有 7 种对象:道路、障碍物、加油站、END 瓦片、START 瓦片以及 2 辆汽车。我使用生成方法随机生成地图,然后将其传递给 GUI class,这样它就可以完成它的工作,向用户显示地图。
但是,我不知道如何从地图上删除某些图块,以便我可以向用户显示汽车所在的位置。我使用图像,然后将它们放入标签中。我最初的行动是从网格中删除整个组件并为汽车添加一个新的 ImageIcon。另外,我知道“.setIcon”方法,但我怎么知道要编辑哪个 ImageIcon?
生成方法。
public void generate(){
int result;
int greenCounter = 0;
int blackCounter = 0;
for (int i = 0; i < tiles.length; i++){
for (int j = 0; j < tiles.length; j++){
result = (int)(Math.random()*23 + 1);
if (i == 0 && j == 0) tiles[i][j] = new Start();
else if (i == 9 && j == 0) tiles[i][j] = new End();
else if (result > 2) tiles[i][j] = new Grey();
else if (result == 1) {
blackCounter++;
if (blackCounter <=6) tiles[i][j] = new Black();
else tiles[i][j] = new Grey();
}
else if (result == 2){
greenCounter++;
if (greenCounter <=6) tiles[i][j] = new Green();
else tiles[i][j] = new Grey();
}
}
}
}
GUI构造函数中的地图创建:
for(int i = 0; i < tiles.length; i++){
for(int j = 0; j < tiles.length; j++){
if(tiles[i][j] instanceof Green) {
roadGas = new ImageIcon ("road/road_gas.jpg");
roadGasLb = new JLabel(roadGas);
tilesPanel.add(roadGasLb);
}
else if(tiles[i][j] instanceof Grey){
road = new ImageIcon ("road/road.jpg");
roadLb = new JLabel(road);
tilesPanel.add(roadLb);
}
else if(tiles[i][j] instanceof Black){
roadObstacle = new ImageIcon("road/road_obstacle.jpg");
roadObstacleLb = new JLabel(roadObstacle);
tilesPanel.add(roadObstacleLb);
}
else if (i == 9 && j==0) {
roadStart = new ImageIcon ("road/roadStart_car.jpg");
roadStartLb = new JLabel(roadStart);
tilesPanel.add(roadStartLb);
}
else if (i == 0 && j == 0) {
roadEnd = new ImageIcon ("road/roadEnd.jpg");
roadEndLb = new JLabel(roadEnd);
tilesPanel.add(roadEndLb);
}
}
}
汽车在地图内移动时应该如何显示。我知道这行不通,但我不知道该怎么做。
carLocation = nissan.getCarLocation();
int x;
int y;
for (int i = 0; i < carLocation.length; i++){
for (int j = 0; j < carLocation.length; j++){
if (carLocation[i][j] != null){
if (tiles[i][j] instanceof Black) tiles[i][j].action(nissan);;
if (tiles[i][j] instanceof Grey) tiles[i][j].action(nissan);
if (tiles[i][j] instanceof Green) tiles[i][j].action(nissan);
x = i;
y = j;
if (x % 2 == 0){
roadCar = new ImageIcon ("road/road_GTR_right.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
else {
roadCar = new ImageIcon ("road/road_GTR_left.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
break;
}
How the map looks:
提前致谢,非常感谢您的回答。
您可以使用 add(Component, index) 在正确的位置添加替换组件。您可以通过在 Container.getComponents() 的结果中找到旧组件来找出正确的索引,或者如果您知道行和列
However, I have no idea how to remove certain tiles from the map, so that I can show to the user where the car is located at.
嗯,您不应该使用 row/column 值 "grid" 组件所在的位置。然后,您可以使用 Container
的 remove(...)
和 add(...)
方法将组件 remove/add 添加到面板。类似于:
int index = (rowIndex * cellsInRow) + columnIndex.
panel.remove(index);
panel.add(component, index);
panel.revalidate();
panel.repaint();
或者更简单的是使用
替换标签的图标
label.setIcon(...) method.
我正在使用 Java 创建赛车游戏,但在 GUI 部分卡住了。
基本上,在我的游戏中,您掷骰子,两辆车中的一辆相应地从位置 (9,0) 移动到位置 (0,0)。谁到达 (0,0) 就是赢家。问题是游戏已经准备就绪,除了移动过程之外,一切都运行良好。我正在使用 GridLayout 向用户展示地图,地图上有 7 种对象:道路、障碍物、加油站、END 瓦片、START 瓦片以及 2 辆汽车。我使用生成方法随机生成地图,然后将其传递给 GUI class,这样它就可以完成它的工作,向用户显示地图。
但是,我不知道如何从地图上删除某些图块,以便我可以向用户显示汽车所在的位置。我使用图像,然后将它们放入标签中。我最初的行动是从网格中删除整个组件并为汽车添加一个新的 ImageIcon。另外,我知道“.setIcon”方法,但我怎么知道要编辑哪个 ImageIcon?
生成方法。
public void generate(){
int result;
int greenCounter = 0;
int blackCounter = 0;
for (int i = 0; i < tiles.length; i++){
for (int j = 0; j < tiles.length; j++){
result = (int)(Math.random()*23 + 1);
if (i == 0 && j == 0) tiles[i][j] = new Start();
else if (i == 9 && j == 0) tiles[i][j] = new End();
else if (result > 2) tiles[i][j] = new Grey();
else if (result == 1) {
blackCounter++;
if (blackCounter <=6) tiles[i][j] = new Black();
else tiles[i][j] = new Grey();
}
else if (result == 2){
greenCounter++;
if (greenCounter <=6) tiles[i][j] = new Green();
else tiles[i][j] = new Grey();
}
}
}
}
GUI构造函数中的地图创建:
for(int i = 0; i < tiles.length; i++){
for(int j = 0; j < tiles.length; j++){
if(tiles[i][j] instanceof Green) {
roadGas = new ImageIcon ("road/road_gas.jpg");
roadGasLb = new JLabel(roadGas);
tilesPanel.add(roadGasLb);
}
else if(tiles[i][j] instanceof Grey){
road = new ImageIcon ("road/road.jpg");
roadLb = new JLabel(road);
tilesPanel.add(roadLb);
}
else if(tiles[i][j] instanceof Black){
roadObstacle = new ImageIcon("road/road_obstacle.jpg");
roadObstacleLb = new JLabel(roadObstacle);
tilesPanel.add(roadObstacleLb);
}
else if (i == 9 && j==0) {
roadStart = new ImageIcon ("road/roadStart_car.jpg");
roadStartLb = new JLabel(roadStart);
tilesPanel.add(roadStartLb);
}
else if (i == 0 && j == 0) {
roadEnd = new ImageIcon ("road/roadEnd.jpg");
roadEndLb = new JLabel(roadEnd);
tilesPanel.add(roadEndLb);
}
}
}
汽车在地图内移动时应该如何显示。我知道这行不通,但我不知道该怎么做。
carLocation = nissan.getCarLocation();
int x;
int y;
for (int i = 0; i < carLocation.length; i++){
for (int j = 0; j < carLocation.length; j++){
if (carLocation[i][j] != null){
if (tiles[i][j] instanceof Black) tiles[i][j].action(nissan);;
if (tiles[i][j] instanceof Grey) tiles[i][j].action(nissan);
if (tiles[i][j] instanceof Green) tiles[i][j].action(nissan);
x = i;
y = j;
if (x % 2 == 0){
roadCar = new ImageIcon ("road/road_GTR_right.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
else {
roadCar = new ImageIcon ("road/road_GTR_left.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
break;
}
How the map looks:
提前致谢,非常感谢您的回答。
您可以使用 add(Component, index) 在正确的位置添加替换组件。您可以通过在 Container.getComponents() 的结果中找到旧组件来找出正确的索引,或者如果您知道行和列
However, I have no idea how to remove certain tiles from the map, so that I can show to the user where the car is located at.
嗯,您不应该使用 row/column 值 "grid" 组件所在的位置。然后,您可以使用 Container
的 remove(...)
和 add(...)
方法将组件 remove/add 添加到面板。类似于:
int index = (rowIndex * cellsInRow) + columnIndex.
panel.remove(index);
panel.add(component, index);
panel.revalidate();
panel.repaint();
或者更简单的是使用
替换标签的图标label.setIcon(...) method.