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



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

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

但是,我收到编译错误incompatible types: String cannot be converted to JLabelincompatible 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());

相关内容

最新更新