简体   繁体   中英

I cannot see Radio buttons in Java Swing

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM