Я использую несколько интеракторов в следующем классе. Все они отлично работают, то есть делают то, что я хочу. Тем не менее, они не работают визуально. Например, когда я нажимаю кнопку JButton, которая предназначена для очистки экрана, она делает это, но кнопка JButton не нажимает. Это хорошо для JButton, но для Radio Buttons это создает проблему. Когда я нажимаю, чтобы переключать переключатели, я могу переключать происходящее на экране, но выбор переключателя не переключается. Почему это происходит? Я часами смотрю на код и не могу понять. (Надеюсь, мое описание было понятно ... вот код ...). Документацию для библиотек acm можно найти здесь .
package forces;
import java.util.*;
import javax.swing.*;
import acm.graphics.*;
import java.awt.event.*;
public class InteractiveClosedSystem extends ClosedSystem {
private GOval newMass;
private JRadioButton positiveRB;
private JRadioButton negativeRB;
public void init() {
masses = new ArrayList<Mass>();
add(new JButton("Clear"), SOUTH);
initRadioButtons();
addActionListeners();
addMouseListeners();
addKeyListeners();
}
private void initRadioButtons() {
// Radio button group for charge
ButtonGroup chargeBG = new ButtonGroup();
positiveRB = new JRadioButton("Positive");
negativeRB = new JRadioButton("Negative");
// Add all radio buttons to button group
chargeBG.add(positiveRB);
chargeBG.add(negativeRB);
// Set initial radio button selection
positiveRB.setSelected(true);
// Add all radio buttons to control bar
add(new JLabel(" Charge"), SOUTH);
add(positiveRB, SOUTH);
add(negativeRB, SOUTH);
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Clear")) {
masses.removeAll(masses);
removeAll();
}
}
public void mouseClicked(MouseEvent e) {
newMass = new GOval(e.getX(), e.getY(), 30, 30);
newMass.setFilled(true);
if (positiveRB.isSelected()) {
newMass.setColor(Mass.POSITIVE_COLOR);
} else {
newMass.setColor(Mass.NEGATIVE_COLOR);
}
add(newMass);
}
}