为什么我的 JLabel 网格不能正常工作?
Why is my JLabel grid not functioning properly?
我正在尝试制作一个每次按下按钮时都会更新的 JLabel 网格。每个按钮(北、南、东、西)将图像从一个 JLabel 移动到网格上的另一个位置。我一遍又一遍地编写和重写代码,但我仍然无法正确更新它。为什么 ImageIcon 有时出现而不是其他?我的逻辑哪里有问题?
此外,我确实看了很多其他关于这个问题的问题,但是 none 其中对我有帮助...
我们将不胜感激任何帮助。
ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getActionCommand() == Actions.east.name()){
System.out.println("east!");
if(yPosition<4){
xPosition++;
}
}
if(evt.getActionCommand() == Actions.west.name()){
System.out.println("west!");
if(yPosition>0){
xPosition--;
}
}
if(evt.getActionCommand() == Actions.north.name()){
System.out.println("north!");
if(xPosition>0){
yPosition--;
}
}
if(evt.getActionCommand() == Actions.south.name()){
System.out.println("south!");
if(xPosition<4){
yPosition++;
}
}
URL imageMan = getClass().getResource("man.png");
man= new ImageIcon(imageMan);
URL imageGrass = getClass().getResource("grass.jpg");
grass= new ImageIcon(imageGrass);
int row=0;
if(row==0){
while(row<=5){
if(yPosition == row){
for(int i=0;i<=5;i++){
if(i==xPosition){
points[i][row].setIcon(man);
}
else{
points[i][row].setIcon(grass);
}
}
}
else{
for(int i=0;i<=5;i++){
points[i][row].setIcon(grass);
}
row++;
}
}
}
row=0;
System.out.println("codinates: ("+xPosition+","+yPosition+")");
}
}
这是我想要的结果的屏幕截图,男人可以使用按钮在屏幕上移动。
我找出了问题所在,并且能够显着简化代码。
这是有效的新更新代码:
ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;
public int oldX =0;
public int oldY = 0;
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {
oldX = xPosition;
oldY = yPosition;
if(evt.getActionCommand() == Actions.east.name()){
System.out.println("east!");
if(xPosition<4){
xPosition++;
}
else{
System.out.println("can't go east!");
}
}
if(evt.getActionCommand() == Actions.west.name()){
System.out.println("west!");
if(xPosition>0){
xPosition--;
}
else{
System.out.println("can't go west!");
}
}
if(evt.getActionCommand() == Actions.north.name()){
System.out.println("north!");
if(yPosition>0){
yPosition--;
}
else{
System.out.println("can't go north!");
}
}
if(evt.getActionCommand() == Actions.south.name()){
System.out.println("south!");
if(yPosition<4){
yPosition++;
}
else{
System.out.println("can't go south!");
}
}
URL imageMan = getClass().getResource("man.png");
man= new ImageIcon(imageMan);
URL imageGrass = getClass().getResource("grass.jpg");
grass= new ImageIcon(imageGrass);
points[oldX][oldY].setIcon(grass);
points[xPosition][yPosition].setIcon(man);
System.out.println("codinates: ("+xPosition+","+yPosition+")");
}
}
我正在尝试制作一个每次按下按钮时都会更新的 JLabel 网格。每个按钮(北、南、东、西)将图像从一个 JLabel 移动到网格上的另一个位置。我一遍又一遍地编写和重写代码,但我仍然无法正确更新它。为什么 ImageIcon 有时出现而不是其他?我的逻辑哪里有问题?
此外,我确实看了很多其他关于这个问题的问题,但是 none 其中对我有帮助...
我们将不胜感激任何帮助。
ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getActionCommand() == Actions.east.name()){
System.out.println("east!");
if(yPosition<4){
xPosition++;
}
}
if(evt.getActionCommand() == Actions.west.name()){
System.out.println("west!");
if(yPosition>0){
xPosition--;
}
}
if(evt.getActionCommand() == Actions.north.name()){
System.out.println("north!");
if(xPosition>0){
yPosition--;
}
}
if(evt.getActionCommand() == Actions.south.name()){
System.out.println("south!");
if(xPosition<4){
yPosition++;
}
}
URL imageMan = getClass().getResource("man.png");
man= new ImageIcon(imageMan);
URL imageGrass = getClass().getResource("grass.jpg");
grass= new ImageIcon(imageGrass);
int row=0;
if(row==0){
while(row<=5){
if(yPosition == row){
for(int i=0;i<=5;i++){
if(i==xPosition){
points[i][row].setIcon(man);
}
else{
points[i][row].setIcon(grass);
}
}
}
else{
for(int i=0;i<=5;i++){
points[i][row].setIcon(grass);
}
row++;
}
}
}
row=0;
System.out.println("codinates: ("+xPosition+","+yPosition+")");
}
}
这是我想要的结果的屏幕截图,男人可以使用按钮在屏幕上移动。
我找出了问题所在,并且能够显着简化代码。
这是有效的新更新代码:
ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;
public int oldX =0;
public int oldY = 0;
class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent evt) {
oldX = xPosition;
oldY = yPosition;
if(evt.getActionCommand() == Actions.east.name()){
System.out.println("east!");
if(xPosition<4){
xPosition++;
}
else{
System.out.println("can't go east!");
}
}
if(evt.getActionCommand() == Actions.west.name()){
System.out.println("west!");
if(xPosition>0){
xPosition--;
}
else{
System.out.println("can't go west!");
}
}
if(evt.getActionCommand() == Actions.north.name()){
System.out.println("north!");
if(yPosition>0){
yPosition--;
}
else{
System.out.println("can't go north!");
}
}
if(evt.getActionCommand() == Actions.south.name()){
System.out.println("south!");
if(yPosition<4){
yPosition++;
}
else{
System.out.println("can't go south!");
}
}
URL imageMan = getClass().getResource("man.png");
man= new ImageIcon(imageMan);
URL imageGrass = getClass().getResource("grass.jpg");
grass= new ImageIcon(imageGrass);
points[oldX][oldY].setIcon(grass);
points[xPosition][yPosition].setIcon(man);
System.out.println("codinates: ("+xPosition+","+yPosition+")");
}
}