【问题标题】:Can you put an array into a JLabel (java )你能把一个数组放入一个 JLabel (java)
【发布时间】:2021-08-06 04:40:09
【问题描述】:

我正在尝试为一个刽子手游戏制作/添加功能,但在尝试显示正确猜到的字母时偶然发现了以下问题。

我所暗示的代码部分的工作原理如下:

当一个字母被正确猜到时,index 应该得到以下字母的索引,在 char 数组中:randomWord

在那之后我想要对数组:displayWord 设置标签:rättord,然后对于正确猜测的每个字母,包含该字母的索引变得可见。

如何将数组:displayWord 添加到JLabelrättord? 我想这样做的目的是在数组中一次只显示一个字母。

目标是让每一个被正确猜到的字母都出现在JLabel rättord中,欢迎任何其他显示正确猜词的方法。

(当前代码)

代码:

package hangmann;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class HangMan extends JPanel implements ActionListener, MouseListener {
private int error;
JButton button;
JTextField field;
JFrame frame;
JLabel rättord;

HangMan(JButton button, JTextField field, JFrame frame, JLabel rättord) {
    this.button = button;
    this.field = field;
    this.frame = frame;
    this.rättord = rättord;
    this.addMouseListener(this);
}

static String [] ord = {"london", "stockholm", "berlin", "rome", "" }; 
static Random r = new Random();
static int randomNumber=r.nextInt(ord.length);
static String d = ord[randomNumber];

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    String guessedWord = field.getText();
    if (source.equals(button)) {
        if (!d.contains(guessedWord)) {
            error++;
            frame.repaint();
            rättord.setText(d);
        }
        if (d.contains(guessedWord)) {
            char [] randomWord = d.toCharArray();   
            char CharGuessedWord = guessedWord.charAt(0);
            
            int index = 0;
            for(int i = 0; i < randomWord.length; i++ ) {
                if(randomWord[i] == CharGuessedWord) {
                    index = 1+ i;}
                else {
                    i = i+ 1 ; 
                }
            }

            char [] displayWord = d.toCharArray();

            rättord.setText(Integer.toString(index));
        }
        field.setText("");
    }
}

public void paintComponent(Graphics g ) {
    super.paintComponent(g);
    if (error == 1)
        g.drawLine(10, 270, 500, 270);
    if (error == 2) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
    }
    if (error == 3) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
    }
    if (error == 4) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
    }
    if (error == 5) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
    }
    if (error == 6) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
    }
    if (error == 7) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
    }
    if (error == 8) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
        g.drawLine(350, 200,390, 240);
    }
    if (error == 9) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
        g.drawLine(350, 200,390, 240);
        g.drawLine(350, 200, 310, 240);
    }
    if (error == 9) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
        g.drawLine(350, 200,390, 240);
        g.drawLine(350, 200, 310, 240);
    }
    if (error == 10) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
        g.drawLine(350, 200,390, 240);
        g.drawLine(350, 200, 310, 240);
        g.drawLine(350, 170, 400, 150);
    }
    if (error == 11) {
        g.drawLine(10, 270, 500, 270);
        g.drawLine(200, 30, 200, 270);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(200, 30, 350, 30);
        g.drawLine(250, 30, 200, 75);
        g.drawLine(350, 30, 350,100);
        g.drawOval(330, 100, 40, 40);
        g.drawLine(350, 140, 350,200);
        g.drawLine(350, 200,390, 240);
        g.drawLine(350, 200, 310, 240);
        g.drawLine(350, 170, 400, 150);
        g.drawLine(350, 170, 300, 150);
  }        
    if(error > 11) {
        g.setFont(new Font("Calibri", Font.BOLD, 26));
        g.drawString("GAME OVER", 225, 150);
    }
}

public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("HangMan");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel rubrikOrd = new JLabel("rätt gissade ord");
    rubrikOrd.setOpaque(false);
    rubrikOrd.setBackground(Color.GREEN);
    rubrikOrd.setBounds(10, 10, 100, 20);

    JLabel rättord = new JLabel();
    rättord.setOpaque(true);
    rättord.setBackground(Color.GREEN);
    rättord.setBounds(10, 35, 100, 20);

    JTextField field = new JTextField();
    field.setVisible(true);

    JButton b = new JButton("ok");
    b.setBounds(370, 300, 100, 30);
    frame.add(b);
    field.setSize(300, 30);
    field.setLocation(60, 300);
    field.setVisible(true);
    frame.add(field);
    frame.add(rättord);
    frame.add(rubrikOrd);

    frame.setBackground(Color.white);
    frame.setSize(600, 400);

    HangMan object = new HangMan(b, field, frame, rättord);
    b.addActionListener(object);
    field.addActionListener(object);
    frame.add(object);
    frame.setVisible(true);
}

@Override
public void mouseClicked(MouseEvent e) {
    System.out.println(e.getX() + " " + e.getY());
}

@Override
public void mousePressed(MouseEvent e) {
}


@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}
}

我指的部分:

    public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    
    String guessedWord = field.getText();
    
    if (source.equals(button)) {
        if (!d.contains(guessedWord)) {
            error++;
            frame.repaint();
            rättord.setText(d);
        }
        if (d.contains(guessedWord)) {
            char [] randomWord = d.toCharArray();   
            char CharGuessedWord = guessedWord.charAt(0);
            
            int index = 0;
            for(int i = 0; i < randomWord.length; i++ ) {
                if(randomWord[i] == CharGuessedWord) {
                    index = 1+ i;}
                else {
                    i = i+ 1 ; 
                }
            }
            char [] displayWord = d.toCharArray();

            rättord.setText(Integer.toString(index));
        }
        field.setText("");
    }
}
 

【问题讨论】:

  • 也许使用 StringBuilder 而不是数组。您可以使用 StringBuilder 的 toString() 方法来获取要在标签中显示的文本。
  • 我现在正在尝试这样做,我认为所有的逻辑都是有道理的。但是我有一个问题,在我添加了索引和 charGuessedWord: java.lang.StringIndexOutOfBoundsException: index 0, length 0 shows upp.
  • 好吧,异常方法说明了一切。 StringbBuilder 是空的。您不能索引空的 StringBuilder。您是否进行了基本调试以确定它为空的原因。
  • 好吧,异常方法说明了一切。 StringbBuilder 是空的。您不能索引空的 StringBuilder。你为什么要访问文本?每次进行有效猜测时,您应该只是“附加”一个字符。

标签: java arrays swing jlabel


【解决方案1】:

我无法评论,但你不可能使用与 randomWord 相同大小的 char 数组,但全部初始化为 * 或 _,并且猜测正确,用 char 替换索引,然后你可以使用@camickr 提到的 StringBuilder 或者您可以使用一些自定义 toString() 或其他自定义方法来返回数组元素的整个字符串表示形式,并为您的标签返回 setText()

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 2018-01-13
    • 2011-04-11
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多