I have 2 buttons and one button group for them, but I cannot see them in app window. Normal buttons work for me, but not the radio ones. I was using tutorial for normal buttons and then I have checked out how to do radio ones, but this method doesn't work for me at all.
MyFrame.java
package com.company;
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {
public MyFrame() {
super("DES");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(800,600);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
//add(new JButton("Przycisk 1"));
//add(new JButton("Przycisk 2"));
//add(new JButton("Przycisk 3"));
//JPanel buttonPanel = new ButtonPanel();
//add(buttonPanel);
JPanel radioPanel = new RadioPanel();
add(radioPanel);
setVisible(true);
}
}
RadioPanel.java
package com.company;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class RadioPanel extends JPanel implements ActionListener{
private JRadioButton modeDES;
private JRadioButton mode3DES;
public RadioPanel() {
modeDES = new JRadioButton("DES");
modeDES.setSelected(true);
mode3DES = new JRadioButton("3DES");
ButtonGroup desMode = new ButtonGroup();
desMode.add(modeDES);
desMode.add(mode3DES);
modeDES.addActionListener(this);
mode3DES.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == modeDES)
System.out.println("DES");
else if(source == mode3DES)
System.out.println("3DES");
}
}
I have white window, no buttons at all.
You also need to add the radio buttons to the panel. Just adding them to the button group is not enough. The only purpose of the button group is to ensure that only one radio button in the button group can be selected.
Here is your corrected code. Note that I only added two lines.
package com.company;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class RadioPanel extends JPanel implements ActionListener{
private JRadioButton modeDES;
private JRadioButton mode3DES;
public RadioPanel() {
modeDES = new JRadioButton("DES");
modeDES.setSelected(true);
mode3DES = new JRadioButton("3DES");
ButtonGroup desMode = new ButtonGroup();
desMode.add(modeDES);
desMode.add(mode3DES);
modeDES.addActionListener(this);
mode3DES.addActionListener(this);
add(modeDES); // added this line
add(mode3DES); // added this line
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == modeDES)
System.out.println("DES");
else if(source == mode3DES)
System.out.println("3DES");
}
}
Note that I did not change the code of class MyFrame
. I only changed class RadioPanel
.
I recommend the [online] tutorial Creating a GUI With JFC/Swing