JButton не будет распакован - PullRequest
0 голосов
/ 08 мая 2020

Я разрабатываю текстовый редактор, в котором у меня есть боковая панель и строка меню для форматирования текста, например, вы можете сделать текст полужирным, пройдя по меню или нажав кнопку. Но при нажатии кнопки она остается нажатой, даже если я нажимаю ее снова. Если я делаю это через строку меню, он нажимает, а затем нажимает, когда снова выбираю полужирный. Итак, через строку меню работает, при выполнении на боковой панели не работает.

Код для нажатия и нажатия кнопки, это у меня на боковой панели (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» - через боковую панель. И меню, и боковая панель переключают выделение жирным шрифтом, просто чтобы кнопка на боковой панели не была нажата при повторном нажатии.

У кого-нибудь была подобная проблема, и может быть, есть решение?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Я использовал 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();
    }

Appri sh!

0 голосов
/ 08 мая 2020

Используйте JToggleButton , и вам не придется беспокоиться о нажатом / неотжатом состоянии.

...