java - 如何将 JLabel 转换为字符串,反之亦然?

标签 java swing jlabel tic-tac-toe incompatibletypeerror

我正在尝试构建一个 TicTacToe 游戏,该游戏通过使用 JDialog 框获取玩家输入 dialogBox & JTextField textField 。单击提交按钮后,接受输入并为游戏中的每个玩家命名。但是,我遇到的问题是我无法将 JLabel 转换为字符串,反之亦然。

我想从 textField 获取文本输入并将其分配给jlblStatus以显示用户的姓名。我创建了makeString ()使用 XML Encoder 和 ByteArrayOutputStream 更改 jlblStatus到一个字符串中,以便我可以分配 textField 中的输入至jlblStatus 。然后我可以转换jlblStatus使用 makeLabel() 回到 JLabel使用 XML 解码器和 ByteArrayInputStream。

但是,我收到编译错误 incompatible types: String cannot be converted to JLabel & incompatible types: JLabel cannot be converted to String这意味着 makeString()无法转换jlblStatus成字符串。

具有 makeString() 和 makeLabel() 的类

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;


public class TicTacToeFrame extends JFrame {
   public char whoseTurn = 'X';   

   public Cell [] [] cells = new Cell [3] [3];

   JLabel jlblStatus = new JLabel ("X's turn to play");

   public boolean gameOver = false;

   public String players;

   public JPanel panel;

   JDialog dialogBox;

   JTextField textField;

   public TicTacToeFrame () {
     panel = new JPanel (new GridLayout (3, 3, 0, 0));
     for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            panel.add (cells [i] [j] = new Cell(this));
        }
    }

    panel.setBorder (new LineBorder (Color.red, 1));
    jlblStatus.setBorder (new LineBorder (Color.yellow, 1));

    add (panel, BorderLayout.CENTER);
    add (jlblStatus, BorderLayout.SOUTH);
  }

  public class miniFrame implements ActionListener {
    public miniFrame () {
      JFrame Frame = new JFrame ();
      dialogBox = new JDialog (Frame, "TicTacToe User Input", true);
      dialogBox.setLayout (new FlowLayout ());
      textField = new JTextField ("ENTER YOUR NAME", 20);
      JButton Submit = new JButton ("Submit");
      JLabel Player_X = new JLabel ("Player X: ");
      Submit.addActionListener (this);

      dialogBox.add (Player_X);
      dialogBox.add (textField);
      dialogBox.add (Submit);

      dialogBox.setSize (400, 150);
      dialogBox.setVisible (true);
   }

    public void actionPerformed (ActionEvent e) {
      String s = e.getActionCommand ();
      if (s.equals ("Submit")) {
         playerOne = textField.getText () + "'s turn to play";
         makeString (jlblStatus);
         jlblStatus = playerOne;
         makeLabel (playerOne);
      }
   }
 }

 String makeString (JLabel jl) {//This is the method which converts the Jlabel into a String
   ByteArrayOutputStream baos = new ByteArrayOutputStream ();
   XMLEncoder e = new XMLEncoder (baos);
   e.writeObject (jl);
   e.close ();
   return new String (baos.toByteArray ());
 }//CLOSE TOSTRING METHOD

 JLabel makeLabel (String str) {//This is the method which converts the String into a JLabel
   XMLDecoder d = new XMLDecoder (new ByteArrayInputStream (str.getBytes ()));
   JLabel label = (JLabel) d.readObject ();
   d.close ();
   return label;
 }//CLOSE FROMSTRING METHOD

 //ISFULL METHOD
 public boolean isFull () {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (cells [i] [j].getToken () == ' ') {
              return false;//FALSE BOOLEAN IS RETURNED 
            }
        }
    }
    return true;
 }

 public boolean isWon (char token) {
   for (int i = 0; i < 3; i++) {
      if ((cells [i] [0].getToken () == token) && (cells [i] [1].getToken () == token) && (cells [i] [2].getToken () == token)) {
          return true;
      }
   }

   for (int j = 0; j < 3; j++) {
      if ((cells [0] [j].getToken () == token) && (cells [1] [j].getToken () == token) && (cells [2] [j].getToken () == token)) {
         return true;
      }
   }

   if ((cells [0] [0].getToken() == token) && (cells [1] [1].getToken () == token) && (cells [2] [2].getToken () == token)) {
       return true;
   }

   if ((cells [0] [2].getToken() == token) && (cells [1] [1].getToken () == token) && (cells [2] [0].getToken () == token)) {
      return true;
   }

   return false;
 }
}

编译错误

TicTacToeFrame.java:70: error: incompatible types: String cannot be converted to JLabel
      jlblStatus = playerOne;
                   ^
TicTacToeFrame.java:71: error: incompatible types: JLabel cannot be converted to String
      makeLabel (jlblStatus);
                 ^
Note: Some messages have been simplified; recompile with - 
Xdiags:verbose to get full output
2 errors

我如何解决这个问题并将 Jlabel 转换为字符串,反之亦然?

最佳答案

您可能正在寻找这个:

jlblStatus.setText(playerOne);
makeLabel(jlblStatus.getText());

关于java - 如何将 JLabel 转换为字符串,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594414/

相关文章:

java - 圆计算器有错误

java - 如何在 JPanel 上显示 RGB 值的二维数组?

java - jtree 高 DPI 无法缩放

java - 我正在尝试将 mysql 查询结果打印到 jLabel 中

java - 通过ant将参数传递给java

java - Maven-构建 pom 时出错

java - Netbeans 教程 : Creating a graphical client for twitter

java - 在 JLabel 上分层文本

java swing - JLabel不旋转

java - 捕获运行时异常后程序停止执行