4

我制作了一个按钮并.setText()对其进行了操作,因为我必须将 的值.setText()与其他值进行比较。

我将 应用于.setText()JButton,但我不希望文本在我的按钮中可见。如果我这样做setVisible(false),它会隐藏整个按钮,但我只希望它隐藏文本。

有这个选项吗?我考虑过制作自定义字体并将其应用于文本中,.setText()但我想知道是否有更有效的选择来解决我的问题。

提前谢谢各位。

编辑:我不能使用.setText(" "),因为我必须比较其中的值。

4

5 回答 5

7

你说:

编辑:我不能使用 .setText(" ") 因为我必须比较其中的值。

废话。正如我在评论中提到的,将 JButton 的文本设置为" ",并且不要使用 JButton 的文本进行比较。而是使用通过 getActionCommand() 轻松获得的 actionCommand。或使用HashMap<JButton, SomethingElse>.

当您需要更改 JButton 的行为和状态时,您可以考虑更改 JButton 的 Action,这可以通过调用轻松完成setAction(...)

例如,

import java.awt.event.ActionEvent;
import javax.swing.*;

public class ButtonActions {

   private static void createAndShowGui() {
      JPanel mainPanel = new JPanel();

      JButton myButton = new JButton();

      StartAction startAction = new StartAction();
      PauseAction pauseAction = new PauseAction();
      BlankAction blankAction = new BlankAction();

      startAction.setNextAction(pauseAction);
      pauseAction.setNextAction(blankAction);
      blankAction.setNextAction(startAction);

      myButton.setAction(startAction);
      mainPanel.add(myButton);

      JFrame frame = new JFrame("ButtonActions");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

class SwappingAction extends AbstractAction {
   private Action nextAction;

   public SwappingAction(String text) {
      super(text);
   }

   public void setNextAction(Action nextAction) {
      this.nextAction = nextAction;
   }

   public Action getNextAction() {
      return nextAction;
   }

   @Override
   /**
    * super method needs to be called in child for swap to work
    */
   public void actionPerformed(ActionEvent e) {
      System.out.println("ActionCommand: " + e.getActionCommand());
      ((AbstractButton)e.getSource()).setAction(nextAction);
   }
}

class StartAction extends SwappingAction {
   public static final String START = "Start";

   public StartAction() {
      super(START);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      super.actionPerformed(e);
      // start-specific code goes here
   }
}

class PauseAction extends SwappingAction {
   public static final String PAUSE = "Pause";

   public PauseAction() {
      super(PAUSE);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      super.actionPerformed(e);
      // pause-specific code goes here
   }
}

class BlankAction extends SwappingAction {
   public static final String BLANK = " ";

   public BlankAction() {
      super(BLANK);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      super.actionPerformed(e);
   }
}
于 2013-03-09T22:25:46.690 回答
0

写入buttonName.setText(" ")此按钮不会显示任何名称。每当您想显示名称(在任何事件上)时,请再次设置buttonName.setText("some text")

于 2013-03-09T22:19:35.770 回答
0

如果您坚持不使用setText(""),请尝试设置与背景颜色和文本颜色相同的颜色。检查以下链接

设置背景(java.awt.Color)

setForeground(java.awt.Color)

于 2013-03-09T22:41:24.053 回答
-1

为什么不将第一个按钮命名为“”(1 个空格)。第二个:“”(2 个空格)第三个:“”(3 个空格)等等..

现在,比较一下: if((event.getActionCommand()).equals(" ")) { //第一个按钮 }

if((event.getActionCommand()).equals(" ")) { //第二个按钮 }

..等等

其中 event 是 ActionEvent 的对象

这样按钮将具有唯一的名称并且是不可见的。可怕的编码,我知道。但它确实有效;)

于 2013-12-19T05:53:52.587 回答
-2

代替 .setText(),使用 .setTag() 和 .getTag() 将一些值附加到视图 - 包括按钮 - 以供以后检索。

这些方法直接用于这种目的。

于 2013-03-09T22:33:30.613 回答