Java JLabel的setCharAt a
我正在尝试用可以与JLabel一起使用的东西替换setCharAt。。。我一直在oracle doc上寻找解决方案。我不知道我是找错了还是根本不存在。。如果它不存在,我怎么能解决这个问题?我知道我的命名约定已关闭,并将尽快更改它们Java JLabel的setCharAt a,java,swing,user-interface,jlabel,Java,Swing,User Interface,Jlabel,我正在尝试用可以与JLabel一起使用的东西替换setCharAt。。。我一直在oracle doc上寻找解决方案。我不知道我是找错了还是根本不存在。。如果它不存在,我怎么能解决这个问题?我知道我的命名约定已关闭,并将尽快更改它们 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import j
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);
}
});
}
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入javax.swing.*;
公共类HangmanPanel扩展了JPanel{
发现静态布尔值;
私有静态最终长serialVersionUID=-579335780484828609325L;
公共静态字符串应答器密钥(){
//获取随机数组元素
字符串数组[]=新字符串[10];
数组[0]=“hamlet”;
数组[1]=“阿瓦隆的秘密”;
数组[2]=“伊利亚特”;
数组[3]=“埃德格·爱伦·坡的故事”;
数组[4]=“胡林之子”;
数组[5]=“红色b”+
“+勇气宣言”;
数组[6]=“人与鼠”;
数组[7]=“乌托邦”;
阵列[8]=“众神战车”;
数组[9]=“时间简史”;
ArrayList list=新的ArrayList(Arrays.asList(array));
集合。洗牌(列表);
字符串s=list.get(0);
返回s;
}
公共StringBuilder dashReplace(字符串s){
//将非空白字符替换为破折号并创建StringBuilder对象
字符串tW=s.replaceAll(“\\s”,“-”);
系统输出打印(tW+“\n”);
StringBuilder AnswerKey=新StringBuilder(tW);
返回应答键;
}
公共静态整型查找和替换(字符串s、JLabel应答键、字符串sc、,
字符(ch){
//查找用户输入的位置并替换
int pos=-1;
发现=错误;
while(true){
位置=s.indexOf(sc,位置+1);
如果(位置<0){
打破
}否则{
发现=真;
//setCharAt不适用于JLable
应答键。设置字符(位置,通道);
}
}
JLabel AnswerKey2=新的JLabel(answerKey.toString());
返回pos;
}
公共绞刑架面板(最终字符串s){
此.setLayout(null);
JLabel heading=新JLabel(“欢迎使用Hangman应用程序”);
JButton按钮=新JButton(“确定”);
//获取输入
JLabel tfLable=新的JLabel(“请输入一个字母:”);
最终JLabel AnswerKey=新JLabel(dashReplace(AnswerKey()).toString());
最终JTextField文本=新JTextField(10);
标题.设置尺寸(200,50);
t标签设置尺寸(150,50);
文本设置大小(50,30);
按钮。设置大小(60,20);
应答键设置大小(200100);
标题.设置位置(300,10);
t标签设置位置(50,40);
文本设置位置(50,80);
按钮。设置位置(100,85);
应答机设置位置(100,85);
本条增补(标题);
添加(tfLable);
增加(文本);
这个。添加(按钮);
添加(应答键);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
//无法访问文本
字符串sc=text.getText();
char ch=sc.charAt(0);
查找并替换(s、AnswerKey、sc、ch);
}
});
}
}
为JLabel
组件设置文本的唯一方法是setText
。而且字符串
是不可变的。因此,您可以使用StringBuilder
:
StringBuilder builder = new StringBuilder(answerKey.getText());
builder.setCharAt(pos, ch);
answerKey.setText(builder.toString());
为什么要将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(...);
我知道我的命名约定已关闭,将尽快更改它们…
-在发布问题之前更改它们,而不是之后。让你的问题尽可能容易让我们理解。谢谢你也非常有帮助