【问题标题】:JButton will not be unpressedJButton 不会被按下
【发布时间】: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

标签: java swing jpanel jbutton


【解决方案1】:

使用JToggleButton,您不必担心按下/未按下状态。

【讨论】:

    【解决方案2】:

    我按照建议使用了 JToggleButton,效果很好! 在我的 press() 函数中,我手动设置和取消设置它,因此也可以通过菜单栏访问它。

    public void press(JToggleButton button){
        if(button.getModel().isSelected()){
            button.getModel().setSelected(false);
        }
        else{
            button.getModel().setSelected(true);
        }
    }
    

    在我的渲染类中

     public void actionPerformed(ActionEvent e){
        String action = e.getActionCommand();
    
        if(action.equals("Bold")){
            contr.bold();
            sidePanel.press(sidePanel.bold);
        }
    

    当从菜单栏按下粗体时执行最后一个代码 并在此处,在侧面板中按下时执行

     else if (action.equals("B")){
            contr.bold();
        }
    

    快点!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多