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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 17:58:59  来源:igfitidea点击:

Java: Problem using setText() method with Button

javabuttonapplet

提问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() 方法。