JB按钮不会被解压

问题描述 投票:0回答:1

我正在开发一个文本编辑器,其中我有一个侧板和菜单栏用于格式化文本,例如,你可以通过菜单或按下按钮使文本加粗。但是,当按下按钮时,即使我再按一次,它也会一直按下去。如果我通过菜单栏来做,当我再次选择加粗时,它就会按下然后再按下。所以,通过菜单栏它可以工作,当在侧板上做的时候,它不工作。

按下和按下按钮的代码,这是在我的侧板(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());
    }
}

在我的渲染视图类中,我有这样的动作listner

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 "通过侧栏.菜单和侧板都可以切换粗体格式,只是侧板中的按钮再按下时不会被压下。

有谁遇到过类似的问题,可能有解决办法?

java swing jpanel jbutton
1个回答
0
投票

使用 JToggleButton 而你将不必担心按下未按下的状态。


0
投票

我按照建议使用了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();
    }

Apprish!

© www.soinside.com 2019 - 2024. All rights reserved.