使JButton中的文本不可见

Gle*_*imo 4 java swing jbutton

我做了一个按钮并做了一个.setText(),因为我必须比较.setText()其他东西的价值.

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

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

先谢谢你们.

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

Hov*_*els 6

你说:

编辑:我不能使用.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);
   }
}
Run Code Online (Sandbox Code Playgroud)