Java 有没有更优雅的方法来创建swing按钮和标签?

Java 有没有更优雅的方法来创建swing按钮和标签?,java,swing,Java,Swing,我仍在学习Java,目前正在为课堂作业制作一个选择题测验。我已经编写了代码,它工作得很好,但当我回去编辑它时,感觉就像是一团混乱。我想把它分解成不同的类和方法,但随着我的尝试,它似乎变得更加复杂。有没有更好(更优雅)的方法?下面是我正在处理的一部分 /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); fram

我仍在学习Java,目前正在为课堂作业制作一个选择题测验。我已经编写了代码,它工作得很好,但当我回去编辑它时,感觉就像是一团混乱。我想把它分解成不同的类和方法,但随着我的尝试,它似乎变得更加复杂。有没有更好(更优雅)的方法?下面是我正在处理的一部分

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 700, 700);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    Font smallFont = new Font("Bookman Old Style", Font.ITALIC, 12);
    Font smallBoldFont = new Font("Bookman Old Style", Font.BOLD, 12);
    Font medBoldFont = new Font("Bookman Old Style", Font.BOLD, 18);
    Font medBoldItalFont = new Font("Bookman Old Style", Font.BOLD + 
         Font.ITALIC, 18);

    JLabel lblSubjectQuiz = new JLabel("SUBJECT QUIZ");
    lblSubjectQuiz.setHorizontalTextPosition(SwingConstants.CENTER);
    lblSubjectQuiz.setVerticalTextPosition(SwingConstants.CENTER);
    lblSubjectQuiz.setHorizontalAlignment(SwingConstants.CENTER);
    lblSubjectQuiz.setBounds(10, 10, 664, 70);
    lblSubjectQuiz.setFont(new Font("Bookman Old Style", Font.BOLD, 28));

    JLabel lblQuestion = new JLabel();
    lblQuestion.setText("<html>" + 
         qAndA.getQuestion(randNum.qNumbers.get(qCount)) + "</html>");
    lblQuestion.setHorizontalTextPosition(SwingConstants.CENTER);
    lblQuestion.setVerticalTextPosition(SwingConstants.CENTER);
    lblQuestion.setHorizontalAlignment(SwingConstants.CENTER);
    lblQuestion.setFont(new Font("Bookman Old Style", Font.PLAIN, 18));
    lblQuestion.setBounds(10, 86, 664, 126);


    // Create radio buttons for the answer choices
    JRadioButton btnAnswerA = new JRadioButton();
    btnAnswerA.setFont(smallFont);
    btnAnswerA.setBounds(28, 252, 325, 35);
    btnAnswerA.setText(qAndA.getAnsA(randNum.qNumbers.get(qCount)));
    JRadioButton btnAnswerB = new JRadioButton();
    btnAnswerB.setFont(smallFont);
    btnAnswerB.setBounds(28, 292, 325, 35);
    btnAnswerB.setText(qAndA.getAnsB(randNum.qNumbers.get(qCount)));
    JRadioButton btnAnswerC = new JRadioButton();
    btnAnswerC.setFont(smallFont);
    btnAnswerC.setBounds(28, 332, 325, 35);
    btnAnswerC.setText(qAndA.getAnsC(randNum.qNumbers.get(qCount)));
    JRadioButton btnAnswerD = new JRadioButton();
    btnAnswerD.setFont(smallFont);
    btnAnswerD.setBounds(28, 372, 325, 35);
    btnAnswerD.setText(qAndA.getAnsD(randNum.qNumbers.get(qCount)));
    ButtonGroup radioButtons = new ButtonGroup();
    radioButtons.clearSelection();
    radioButtons.add(btnAnswerA);
    radioButtons.add(btnAnswerB);
    radioButtons.add(btnAnswerC);
    radioButtons.add(btnAnswerD);

    JLabel lblRightAns = new JLabel("<html>" + "Correct!" + "</html>");
    lblRightAns.setVisible(false);
    lblRightAns.setHorizontalAlignment(SwingConstants.CENTER);
    lblRightAns.setFont(medBoldItalFont);
    lblRightAns.setForeground(Color.GREEN);
    lblRightAns.setBounds(427, 240, 222, 64);
/**
*初始化框架的内容。
*/
私有void初始化(){
frame=新的JFrame();
框架.立根(100100700700);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
Font smallFont=新字体(“Bookman Old Style”,Font.ITALIC,12);
Font smallBoldFont=新字体(“Bookman Old Style”,Font.BOLD,12);
Font medBoldFont=新字体(“Bookman Old Style”,Font.BOLD,18);
Font medBoldItalFont=新字体(“Bookman旧样式”,Font.BOLD+
字体斜体,18);
JLabel lblsubjectquick=新JLabel(“主题测验”);
lblsubjectquick.setHorizontalTextPosition(SwingConstants.CENTER);
lblsubjectquick.setVerticalTextPosition(SwingConstants.CENTER);
LBLSubjectquick.setHorizontalAlignment(SwingConstants.CENTER);
LBLSubjectquick.setBounds(10,10664,70);
lblsubjectquick.setFont(新字体(“Bookman Old Style”,Font.BOLD,28));
JLabel lblQuestion=新的JLabel();
lblQuestion.setText(“+
qAndA.getQuestion(randNum.qNumbers.get(qCount))+“”);
lblQuestion.setHorizontalTextPosition(SwingConstants.CENTER);
lblQuestion.setVerticalTextPosition(SwingConstants.CENTER);
lblQuestion.setHorizontalAlignment(SwingConstants.CENTER);
lblQuestion.setFont(新字体(“Bookman Old Style”,Font.PLAIN,18));
LBL问题。挫折(10、86、664、126);
//为答案选项创建单选按钮
JRadioButton btnAnswerA=新的JRadioButton();
btnAnswerA.setFont(smallFont);
btnAnswerA.setBounds(2825232535);
btnAnswerA.setText(qAndA.getAnsA(randNum.qNumbers.get(qCount));
JRadioButton btnAnswerB=新的JRadioButton();
btnAnswerB.setFont(smallFont);
btnAnswerB.setBounds(28292325,35);
btnAnswerB.setText(qAndA.getAnsB(randNum.qNumbers.get(qCount));
JRadioButton btnAnswerC=新的JRadioButton();
btnAnswerC.setFont(smallFont);
Btnaswerc.立根(2833232535);
btnAnswerC.setText(qAndA.getAnsC(randNum.qNumbers.get(qCount));
JRadioButton btnAnswerD=新的JRadioButton();
btnAnswerD.setFont(smallFont);
btnAnswerD.setBounds(28372325,35);
btnAnswerD.setText(qAndA.getAnsD(randNum.qNumbers.get(qCount));
ButtonGroup单选按钮=新建ButtonGroup();
单选按钮;
单选按钮。添加(btnAnswerA);
单选按钮。添加(btnAnswerB);
单选按钮。添加(BTC);
单选按钮。添加(btnAnswerD);
JLabel lblRightAns=新JLabel(“+”正确!”+”);
lblLightans.setVisible(假);
lblRightAns.设置水平对齐(SwingConstants.中心);
lblRightAns.setFont(medBoldItalFont);
lblRightAns.setForeground(颜色.绿色);
lblRightAns.立根(427、240、222、64);

使用数组可获得紧凑、快速的结果 下面是代码的解决方案 请给我一个肯定的答复,如果这是有效的

JRadioButton btnAnswer[]=new JRadioButton[4];
ButtonGroup radioButtons = new ButtonGroup();
radioButtons.clearSelection();
for (int i=0;i<4;i++){
btnAnswer[i].setFont(smallFont);
btnAnswer[i].setBounds(28, 252 + i*40, 325, 35);
radioButtons.add(btnAnswer[i]);
btnAnswer[i].setText(qAndA.getAnsB(randNum.qNumbers.get(qCount)));
}
JRadioButton btnAnswer[]=新的JRadioButton[4];
ButtonGroup单选按钮=新建ButtonGroup();
单选按钮;

对于(int i=0;如果您使用UI生成器,考虑使用子区域管理器)。给定网格布局的JPanels可以在1x5布局中使用1个问题和4行多选择单选按钮,而不需要添加顺序以外的任何定位信息。您可以使用一些辅助方法来创建JLable和JRADButt T。为更改的内容取参数。这也有助于将创建代码隔离到一个地方,并使固定错误/添加功能更容易。欢迎使用堆栈溢出。请带上,浏览一下,特别是阅读。use属于@Compass谢谢,我没有使用布局管理器,我会研究它。谢谢,这将使单选按钮更易于管理。我本来很接近这一点,但在使用setBounds()时遇到了困难。我将了解如何实现它。感谢您的帮助。