gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:35:51 25 4
gpt4 key购买 nike

我正在尝试构建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com