4

.setText()の値を他の値と比較する必要があるため、ボタンを作成してその上で を.setText()実行しました。

を JButtonに適用し.setText()ましたが、テキストをボタンに表示したくありません。そうすると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

どうしても使いたくない場合はsetText("")、背景色と文字色を同じ色に設定してみてください。以下のリンクを確認してください

setBackground(java.awt.Color)

setForeground(java.awt.Color)

于 2013-03-09T22:41:24.053 に答える
0

これを書くbuttonName.setText(" ")と、ボタンに名前が表示されなくなります。そして、(任意のイベントで)名前を表示したいときはいつでも、もう一度設定してくださいbuttonName.setText("some text")

于 2013-03-09T22:19:35.770 に答える
-1

最初のボタンに「 」(1 スペース) という名前を付けてみませんか。2 番目: " " (スペース 2 個) 3 番目: " " (スペース 3 個) など ..

ここで比較してみましょう: if((event.getActionCommand()).equals(" ")) { //最初のボタン }

if((event.getActionCommand()).equals(" ")) { //2 番目のボタン }

..等々

event は ActionEvent のオブジェクトです

このようにして、ボタンには一意の名前が付けられ、非表示になります。恐ろしいコーディング、私は知っています。しかし、それはトリックを行います;)

于 2013-12-19T05:53:52.587 に答える
-2

.setText()の代わりに、.setTag()および.getTag()を使用して、後で取得できるように、ビュー(ボタンを含む)に値を付加します。

これらのメソッドは、そのような目的のために直接存在します。

于 2013-03-09T22:33:30.613 に答える