簡體   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