У меня есть класс, который я написал, который использует консоль для ввода данных пользователем. Я пытаюсь создать графический интерфейс вокруг него, чтобы улучшить программу. В результате я создал новый класс GUI, который я хотел бы использовать для передачи значений обратно в существующий класс. Я часами рыскал по форуму и, похоже, не могу найти ответ, соответствующий моей конкретной проблеме
Самое близкое, что я нашел, было передать значение радиокнопки, которое выбрано для другого класса , и я фактически использовал рекомендацию этого класса. Это, кажется, работает "иногда", хотя. Что я имею в виду, когда я выбираю переключатель «один» в первый раз, ничего не происходит. Затем я нажимаю на второй переключатель и ничего не происходит (как и ожидалось). Когда я снова нажимаю на первый переключатель, он печатает текст на консоль, как и ожидалось. Я не могу понять, почему это не работает с первого клика. Во-вторых, каждый раз, когда я нажимаю на кнопку «секундная стрелка» и возвращаюсь на первую, она печатает ожидаемый результат в 2 раза больше, чем в предыдущий раз.
/// Класс переключателей
package views;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.EmptyBorder;
import common.ButtonTester;
public class RadioButtons extends JFrame {
private JPanel contentPane;
private JRadioButton rdbtnOne, rdbtnTwo;
private ButtonGroup grp;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RadioButtons frame = new RadioButtons();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public RadioButtons() {
setTitle("Button Demo");
initComponents();
createEvents();
}
**/// Components**
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
rdbtnOne = new JRadioButton("One");
rdbtnTwo = new JRadioButton("Two");
grp = new ButtonGroup();
grp.add(rdbtnOne);
grp.add(rdbtnTwo);
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(126)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(rdbtnTwo)
.addComponent(rdbtnOne))
.addContainerGap(189, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(87)
.addComponent(rdbtnOne)
.addGap(48)
.addComponent(rdbtnTwo)
.addContainerGap(70, Short.MAX_VALUE))
);
contentPane.setLayout(gl_contentPane);
}
**/// Event handlers**
private void createEvents() {
rdbtnOne.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rdbtnOne.addActionListener(new ButtonTester());
}
});
}
}
/// Класс ButtonTester
package common;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonTester implements ActionListener {
public static void main(String[] args) {
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello. I'm in the action Performed Method.");
}
}
Я ожидаю, что каждый раз, когда я нажимаю на кнопку-переключатель 1, строка sysout запускается один раз.