【发布时间】:2020-08-24 04:04:18
【问题描述】:
我正在开发一个文本编辑器,其中我有一个用于格式化文本的侧面板和菜单栏,例如,您可以通过菜单或按下按钮使文本变为粗体。但是,当按下按钮时,即使我再次按下它也会保持按下状态。如果我通过菜单栏进行操作,它会按下,然后在再次选择粗体时按下。因此,通过菜单栏它可以工作,在侧面板中它不起作用。
按下和按下按钮的代码,在我的侧面板(JPanel)中
public void press(JButton button){
System.out.println("Pressed: " + button.getModel().isPressed());
if(button.getModel().isPressed()){
System.out.println("1");
button.getModel().setPressed(false);
}
else{
System.out.println("2");
button.getModel().setPressed(true);
System.out.println("Pressed2: " + button.getModel().isPressed());
}
}
在我的渲染视图类中,我有这个动作监听器
private public void actionPerformed(ActionEvent e){
String action = e.getActionCommand();
if(action.equals("New")){
newTA();
}else if(action.equals("Bold") || action.equals("B")){
contr.bold();
sidePanel.press(sidePanel.bold);
}
}
“粗体”通过菜单,“B”通过侧边栏。 菜单和侧面板都切换了粗体格式,只是侧面板中的按钮在再次按下时不会被按下。
有人遇到过类似的问题,可能有解决办法吗?
【问题讨论】:
-
您无需直接使用ButtonModel。通常,您只需单击按钮,文本就会被属性更改,但按钮的状态保持未按下状态,因为属性不会应用于整个文本。有关工作示例,请参阅Text Component Features。但是,如果您尝试在单击时按住按钮,那么您应该使用
JToggleButton。