我做了一个按钮并对其进行了.setText()
因为我必须将.setText()
的值与其他内容进行比较。
我将.setText()
应用于JButton,但我不希望文本在我的按钮中可见。
如果我setVisible(false)
那么它会隐藏整个按钮,但我只想隐藏文本。
这有选择吗?我已经考虑制作一个自定义字体并将其应用于.setText()
中的文本,但我想知道我的问题是否有更有效的选择。
先谢谢你们。
编辑:我无法使用.setText(" ")
,因为我必须比较其中的值。
答案 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("")
,请尝试将相同的颜色设置为背景颜色和文字颜色。请查看以下链接
答案 3 :(得分:-1)
为什么不命名第一个按钮“”(1个空格)。 第二个:“”(2个空格) 第三个:“”(3个空格)等等。
现在,比较: if((event.getActionCommand())。equals(“”)) {//第一个按钮}
if((event.getActionCommand())。equals(“”)) {//第二个按钮}
..等等
其中event是ActionEvent的对象
这样,按钮将具有唯一的名称并且不可见。 可怕的编码,我知道。但它确实有诀窍;)
答案 4 :(得分:-2)
而不是.setText(),使用.setTag()和.getTag()将一些值附加到视图(包括按钮)以供以后检索。
这些方法直接用于此目的。