使JButton中的文本不可见

时间:2013-03-09 22:15:46

标签: java swing jbutton

我做了一个按钮并对其进行了.setText()因为我必须将.setText()的值与其他内容进行比较。

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

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

先谢谢你们。

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

5 个答案:

答案 0 :(得分:6)

你说:

  

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

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

您可以考虑在需要更改其行为和状态时更改JButton的操作,这可以通过调用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);
   }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

setBackground(java.awt.Color)

setForeground(java.awt.Color)

答案 3 :(得分:-1)

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

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

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

..等等

其中event是ActionEvent的对象

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

答案 4 :(得分:-2)

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

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