繁体   English   中英

使JButton中的文本不可见

[英]Make text in JButton not visible

我做了一个按钮并在其上做了一个.setText() ,因为我必须将.setText()的值与其他东西进行比较。

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

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

先谢谢你们。

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

你说:

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

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

您可以考虑在需要更改其行为和状态时更改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);
   }
}

buttonName.setText(" ")这不会显示按钮的任何名称。 无论何时你想显示名称(在任何事件上),然后再次设置buttonName.setText("some text")

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

的setBackground(java.awt.Color中)

setForeground(java.awt.Color中)

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

现在,比较:if((event.getActionCommand())。equals(“”)){// 1st button}

if((event.getActionCommand())。equals(“”)){//第二个按钮}

..等等

其中event是ActionEvent的对象

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

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

这些方法直接用于此类目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM