gpt4 book ai didi

java - JLabel 的 setCharAt a

转载 作者:行者123 更新时间:2023-12-01 07:32:14 25 4
gpt4 key购买 nike

我正在尝试用可以与 JLabel 一起使用的东西替换 setCharAt...我一直在 oracle 文档中寻找解决方案。我不知道我是否在寻找错误的东西,或者它根本不存在..如果它不存在,我该如何解决这个问题?我知道我的命名约定已关闭,并将尽快更改它们...

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import javax.swing.*;



public class HangmanPanel extends JPanel {
static Boolean FOUND;
private static final long serialVersionUID = -5793357804828609325L;

public static String answerKey() {
//get random array element
String array[] = new String[10];
array[0] = "hamlet";
array[1] = "mysts of avalon";
array[2] = "the iliad";
array[3] = "tales from edger allan poe";
array[4] = "the children of hurin";
array[5] = "the red b" +
"+adge of courage";
array[6] = "of mice and men";
array[7] = "utopia";
array[8] = "chariots of the gods";
array[9] = "a brief history of time";

ArrayList<String> list = new ArrayList<String>(Arrays.asList(array));
Collections.shuffle(list);
String s = list.get(0);
return s;
}

public StringBuilder dashReplace(String s) {
//replace non-white space char with dashes and creates StringBuilder Object
String tW = s.replaceAll("\\S", "-");
System.out.print(tW + "\n");
StringBuilder AnswerKey = new StringBuilder(tW);
return AnswerKey;
}
public static int findAndReplace(String s, JLabel answerKey, String sc,
char ch) {
//find position of user input and replace
int pos = -1;
FOUND = false;
while(true){
pos = s.indexOf(sc, pos+1);
if(pos < 0){

break;
}else{
FOUND = true;
//setCharAt dosen't work for JLable
answerKey.setCharAt(pos, ch);
}

}
JLabel AnswerKey2 = new JLabel(answerKey.toString());
return pos;
}




public HangmanPanel(final String s){
this.setLayout(null);

JLabel heading = new JLabel("Welcome to the Hangman App");
JButton Button = new JButton("Ok");
//get input

JLabel tfLable = new JLabel("Please Enter a Letter:");


final JLabel AnswerKey = new JLabel(dashReplace(answerKey()).toString());

final JTextField text = new JTextField(10);


heading.setSize(200, 50);
tfLable.setSize(150, 50);
text.setSize(50, 30);
Button.setSize(60, 20);
AnswerKey.setSize(200, 100);

heading.setLocation(300, 10);
tfLable.setLocation(50, 40);
text.setLocation(50, 80);
Button.setLocation(100, 85);
AnswerKey.setLocation(100,85);

this.add(heading);
this.add(tfLable);
this.add(text);
this.add(Button);
this.add(AnswerKey);


Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// can't access text
String sc = text.getText();
char ch = sc.charAt(0);
findAndReplace(s, AnswerKey, sc, ch);
}
});

}

}

最佳答案

为什么要尝试将 setCharAt(...) 与 JLabel 一起使用。标签用于显示静态文本。更改它的唯一方法是替换整个字符串。

我想你可以这样做:

StringBuilder text = label.getText();
text.setCharAt(...);
label.setText( text.toString() );

另一种选择是使用看起来像 JLabel 的 JTextField:

JTextField label = new JTextField(...);
label.setEditable(false);
label.setBorder(null);
label.setOpaque(false);

然后,当您需要更改文本时,您可以执行以下操作:

label.select(...);
label.replaceSelection(...);

关于java - JLabel 的 setCharAt a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16465160/

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