Как включить кнопку только после того, как в java JFrame была нажата радиокнопка

После долгих поисков я так и не нашел то, что искал, в основном потому, что не знаю, что искал.

По сути, я хочу, чтобы кнопка блокировки была отключена до тех пор, пока не будет выбрана одна из радиокнопок, и я хочу, чтобы только одна из радиокнопок выбиралась одновременно.

Я еще не делал никакого форматирования, так что все еще безобразно.

Мой JFrame

Мой код:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.*;

public class Game extends JFrame
{
JLabel lblQuestion;
JRadioButton btA;
JRadioButton btB;
JRadioButton btC;
JRadioButton btD;
JButton btLock;
JTextField txtQuestion;
int question = 0;

public Game()
{
    getContentPane().setLayout(null);
    setupGUI();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

void setupGUI()
{
    txtQuestion = new JTextField();
    txtQuestion.setLocation(10,10);
    txtQuestion.setSize(100,25);
    txtQuestion.setText(Integer.toString(question));
    getContentPane().add(txtQuestion);

    lblQuestion = new JLabel();
    lblQuestion.setLocation(50,82);
    lblQuestion.setSize(300,50);
    lblQuestion.setText("No_Label");
    getContentPane().add(lblQuestion);

    btA = new JRadioButton();
    btA.setLocation(50,160);
    btA.setSize(100,50);
    btA.setText("No_Label");
    btA.setSelected(false);
    getContentPane().add(btA);

    btB = new JRadioButton();
    btB.setLocation(250,160);
    btB.setSize(100,50);
    btB.setText("No_Label");
    btB.setSelected(false);
    getContentPane().add(btB);

    btC = new JRadioButton();
    btC.setLocation(50,240);
    btC.setSize(100,50);
    btC.setText("No_Label");
    btC.setSelected(false);
    getContentPane().add(btC);

    btD = new JRadioButton();
    btD.setLocation(250,240);
    btD.setSize(100,50);
    btD.setText("No_Label");
    btD.setSelected(false);
    getContentPane().add(btD);

    btLock = new JButton();
    btLock.setLocation(150,303);
    btLock.setSize(100,50);
    btLock.setText("Lock in");
    getContentPane().add(btLock);

    btLock.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            question = question + 1;
            txtQuestion.setText(Integer.toString(question));
            try{
                ArrayList<String> list = questions(question);
            }catch(Exception ex){}
        }
    });

    setTitle("Who wants to be a millionare");
    setSize(570,400);
    setVisible(true);
    setResizable(true);
    setLocationRelativeTo(null);


}

public ArrayList<String> questions(int quesion) throws IOException{
    File file = new File("questions.txt");
    if (!file.exists()){
        throw new FileNotFoundException("Could not find \"users\" file");
    }
    FileReader fr = new FileReader(file.getAbsoluteFile());
    BufferedReader br = new BufferedReader(fr);

    ArrayList<String> list = new ArrayList<String>();
    String s;
    for(int i = 0; i*4 <= quesion; i++){
        br.readLine();
    }
    while((s=br.readLine()) !=null){
        list.add(s);
    }
    br.close();
    return list;   
}

public static void main( String args[] )
{
    new Game();
}
}  

2 ответа

Решение

Сначала вам нужно добавить слушателя действия в зависимости от того, какую кнопку RadioButton нужно нажать, прежде чем кнопка станет активной.

Как это:

someRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
        someButton.enabled(true);
}
});

И, во-вторых, для единственного RadioButton, используемого одновременно, вам нужна ButtonGroup, например:

ButtonGroup myButtonGroup = new ButtonGroup();
myButtonGroup.add(someRadioButton);

Добавьте все желаемые радиокнопки в группу.

Надеюсь это поможет:)

Начните с изучения использования кнопок, флажков и кнопок радио.

Вы можете использовать ButtonGroup, чтобы убедиться, что выбрана только одна кнопка в группе

Вы можете использовать ActionListener для обнаружения изменений в JRadioButton государство

Другие вопросы по тегам