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