Я сам проверял это и просматривал все ответы в этом посте, и я не думаю, что они отвечают на этот вопрос очень хорошо.Я экспериментировал сам, чтобы получить хороший ответ (код ниже).Вы МОЖЕТЕ запускать любое событие как с помощью ActionListener, так и ItemListener в 100% случаев, когда состояние изменяется с помощью либо переключателя, либо флажка, либо любого другого типа Swing-элемента, который я предполагаю, поскольку это тип Object.Единственное различие, которое я могу сказать между этими двумя слушателями, заключается в том, что тип объекта события, возвращаемого слушателем, отличается.И вы получите лучший тип события с помощью флажка, используя ItemListener, в отличие от ActionListener.
Типы возврата ActionEvent и ItemEvent будут иметь различные сохраненные методы, которые могут использоваться при запуске Event Type.В приведенном ниже коде комментарии показывают разницу в методах .get для каждого возвращаемого класса. Тип события.
Приведенный ниже код устанавливает простой JPanel с JRadioButtons, JCheckBoxes и дисплеем JLabel, который изменяется в зависимости от настроек кнопок.Я установил все RadioButtons и CheckBox с помощью прослушивателя действий и прослушивателя предметов.Затем я написал классы Listener, приведенные ниже, с полностью прокомментированным ActionListener, потому что сначала я протестировал его в этом эксперименте.Вы заметите, что если вы добавите эту панель к кадру и отобразите, все радиокнопки и флажки всегда срабатывают независимо от типа слушателя, просто закомментируйте методы в одном и попробуйте другой и наоборот.
Тип возвращаемого значения в реализованных методах - это ОСНОВНАЯ разница между ними.Оба слушателя запускают события одинаково.Немного лучше объяснено в комментарии выше причина, по которой флажок должен использовать ItemListener вместо ActionListener из-за типа возвращаемого события.
package EventHandledClasses;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class RadioButtonsAndCheckBoxesTest extends JPanel{
JLabel display;
String funny, serious, political;
JCheckBox bold,italic;
JRadioButton funnyQuote, seriousQuote, politicalQuote;
ButtonGroup quotes;
public RadioButtonsAndCheckBoxesTest(){
funny = "You are not ugly, you were just born... different";
serious = "Recommend powdered soap in prison!";
political = "Trump can eat a little Bernie, but will choke on his Birdie";
display = new JLabel(funny);
Font defaultFont = new Font("Ariel",Font.PLAIN,20);
display.setFont(defaultFont);
bold = new JCheckBox("Bold",false);
bold.setOpaque(false);
italic = new JCheckBox("Italic",false);
italic.setOpaque(false);
//Color itemBackground =
funnyQuote = new JRadioButton("Funny",true);
funnyQuote.setOpaque(false);
seriousQuote = new JRadioButton("Serious");
seriousQuote.setOpaque(false);
politicalQuote = new JRadioButton("Political");
politicalQuote.setOpaque(false);
quotes = new ButtonGroup();
quotes.add(funnyQuote);
quotes.add(seriousQuote);
quotes.add(politicalQuote);
JPanel primary = new JPanel();
primary.setPreferredSize(new Dimension(550, 100));
Dimension standard = new Dimension(500, 30);
JPanel radioButtonsPanel = new JPanel();
radioButtonsPanel.setPreferredSize(standard);
radioButtonsPanel.setBackground(Color.green);
radioButtonsPanel.add(funnyQuote);
radioButtonsPanel.add(seriousQuote);
radioButtonsPanel.add(politicalQuote);
JPanel checkBoxPanel = new JPanel();
checkBoxPanel.setPreferredSize(standard);
checkBoxPanel.setBackground(Color.green);
checkBoxPanel.add(bold);
checkBoxPanel.add(italic);
primary.add(display);
primary.add(radioButtonsPanel);
primary.add(checkBoxPanel);
//Add Action Listener To test Radio Buttons
funnyQuote.addActionListener(new ActionListen());
seriousQuote.addActionListener(new ActionListen());
politicalQuote.addActionListener(new ActionListen());
//Add Item Listener to test Radio Buttons
funnyQuote.addItemListener(new ItemListen());
seriousQuote.addItemListener(new ItemListen());
politicalQuote.addItemListener(new ItemListen());
//Add Action Listener to test Check Boxes
bold.addActionListener(new ActionListen());
italic.addActionListener(new ActionListen());
//Add Item Listener to test Check Boxes
bold.addItemListener(new ItemListen());
italic.addItemListener(new ItemListen());
//adds primary JPanel to this JPanel Object
add(primary);
}
private class ActionListen implements ActionListener{
public void actionPerformed(ActionEvent e) {
/*
Different Get Methods from ItemEvent
e.getWhen()
e.getModifiers()
e.getActionCommand()*/
/*int font=Font.PLAIN;
if(bold.isSelected()){
font += Font.BOLD;
}
if(italic.isSelected()){
font += Font.ITALIC;
}
display.setFont(new Font("Ariel",font,20));
if(funnyQuote.isSelected()){
display.setText(funny);
}
if(seriousQuote.isSelected()){
display.setText(serious);
}
if(politicalQuote.isSelected()){
display.setText(political);
}*/
}
}
private class ItemListen implements ItemListener {
public void itemStateChanged(ItemEvent arg0) {
/*
Different Get Methods from ActionEvent
arg0.getItemSelectable()
arg0.getStateChange()
arg0.getItem()*/
int font=Font.PLAIN;
if(bold.isSelected()){
font += Font.BOLD;
}
if(italic.isSelected()){
font += Font.ITALIC;
}
display.setFont(new Font("Ariel",font,20));
if(funnyQuote.isSelected()){
display.setText(funny);
}
if(seriousQuote.isSelected()){
display.setText(serious);
}
if(politicalQuote.isSelected()){
display.setText(political);
}
}
}
}