Java:将 setText() 方法与 Button 一起使用时出现问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1626658/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java: Problem using setText() method with Button
提问by danwoods
I'm new to java and I'm trying to swap out the text on a Button I've created. The code for my main class is as follows:
我是 Java 新手,我正在尝试更换我创建的 Button 上的文本。我的主类的代码如下:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
public class TeamProject extends Applet implements ActionListener, MouseListener
{
char[][] charValues = new char[10][10];
Table aTable;
boolean allowUserInput = false;
Button BtnStart;
Button randomChangeBtn;
boolean guessMode;
private AudioClip[] sounds = new AudioClip[5];
private int counter = 0;
//JSObject jso;
public void init()
{
//setup buttons
BtnStart = new Button("add row/column");
BtnStart.addActionListener((ActionListener)this); //cast
randomChangeBtn = new Button("change one value");
randomChangeBtn.addActionListener((ActionListener)this);
//add button
this.add(BtnStart);
//add image to Image objects
Image imgO = getImage(getCodeBase(), "images/not.gif");
Image imgX= getImage(getCodeBase(), "images/cross.gif");
//setup table
aTable = new Table(100, 100, 75, 55, 5, 5, imgX, imgO);
//setBackground(Color.LIGHT_GRAY);
super.resize(700, 700);
//add mouse listener
addMouseListener(this);
//initially guessMode will be false
guessMode = false;
//to talk to javascript
//jso = JSObject.getWindow(this);
sounds[0] = getAudioClip (getCodeBase(), "images/buzzthruloud.wav");
sounds[1] = getAudioClip (getCodeBase(), "images/inconceivable4.wav");
sounds[2] = getAudioClip (getCodeBase(), "images/foghorn.wav");
sounds[3] = getAudioClip (getCodeBase(), "images/waiting.wav");
sounds[4] = getAudioClip (getCodeBase(), "images/whistldn.wav");
}
public void paint(Graphics g)
{
g.setColor(Color.black);
aTable.draw(g);
}
//Mouse listener methods
public void mousePressed (MouseEvent e)
{
if(!guessMode){
if ((allowUserInput)){
aTable.swapSquareValue(e.getX(), e.getY());
repaint();
}
}
else{
System.out.println("guessed row = " + e.getY() + " guessed col = " + e.getX());
if(aTable.checkGuess(e.getX(), e.getY())){
int n = JOptionPane.showConfirmDialog(null, "Excellent!! Would you like to progress to next level",
"Correct!!!", JOptionPane.YES_NO_OPTION);
if (n == JOpionPane.YES_OPTION) {
}
else{
JOptionPane.showMessageDialog(null, "Nope", "alert", JOptionPane.INFORMATION_MESSAGE);
sounds[counter].play();
}
//repaint();
}
}
public void mouseClicked (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseReleased (MouseEvent e) {}
public void mouseExited (MouseEvent e) {}
//Button action listener
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == BtnStart) {
aTable.addRow();
aTable.addColumn();
BtnStart.setText("Roseindia.net");
//this.remove(BtnStart);
//this.add(randomChangeBtn);
super.resize(700, 700);
repaint();
}
else if (e.getSource() == randomChangeBtn) {
aTable.randomChangeFunc();
repaint();
guessMode = true;
}
allowUserInput = true;
System.out.println(aTable.toString());
}
}
I'm trying to change to text in my actionPerformed(ActionEvent e) method. Like I said, I'm new, so please be gentle. Thanks :)
我正在尝试在我的 actionPerformed(ActionEvent e) 方法中更改为文本。就像我说的,我是新人,所以请温柔点。谢谢 :)
采纳答案by camickr
The first thing you need to know is are you trying to create an Applet using AWT or Swing components. You import the Swing classes but are using AWT components. Most people these days use Swing.
您需要知道的第一件事是您尝试使用 AWT 或 Swing 组件创建 Applet。您导入 Swing 类,但使用的是 AWT 组件。现在大多数人都使用 Swing。
In Swing your would never override the paint() method of the Applet. You would start by extending JApplet, then you would simply add components to the content pane of the applet. If you need to do custom painting then you do that by overriding the paintComponent() method of a JComponent or JPanel.
在 Swing 中,您永远不会覆盖 Applet 的 paint() 方法。您将从扩展 JApplet 开始,然后您只需将组件添加到小程序的内容窗格。如果您需要进行自定义绘制,那么您可以通过覆盖 JComponent 或 JPanel 的paintComponent() 方法来实现。
Start by reading the Swing tutorial for working examples of using applets.
首先阅读 Swing 教程,了解使用小程序的工作示例。
回答by Vincent Ramdhanie
You are using java.awt.Button
. There is no setText()
method in the java.awt.Button. You may use setLabel(String)
instead.
您正在使用java.awt.Button
. setText()
java.awt.Button 中没有方法。你可以setLabel(String)
改用。
And you do not have to import java.lang.* either since the java.lang package is available to all your Java programs by default.
而且您也不必导入 java.lang.*,因为默认情况下 java.lang 包可用于所有 Java 程序。
If you change the line:
如果您更改行:
Button BtnStart;
to
到
JButton BtnStart;
and
和
BtnStart = new Button("add row/column");
to
到
BtnStart = new JButton("add row/column");
then you will be using the Swing Button and you will be able to call setText();
然后您将使用 Swing 按钮,您将能够调用 setText();
回答by Harpreet Singh
As you said that you want to swap the text then you should use the setLabel() method instead of setText, but for changing the text of a Label then you can use the setText() method.
正如您所说,您想交换文本,那么您应该使用 setLabel() 方法而不是 setText,但是要更改标签的文本,则可以使用 setText() 方法。