我是写射箭记分卡的业余爱好者。该程序运行良好,但代价是每 18 行中有 19 段相同的代码。我试图通过使用方法调用来压缩代码。我正在使用 Java SE6 和 Mig 布局
这是 GUI 中有效的代码部分。GUI被称为如下
HomePage(包含 main 方法) -> ChoiceGUI -> buildScoresPanel
public void buildScoresPanelMIG(JPanel scoresPanel) {
for (row = 0; row<(int)numberofrows; row++){
scoresPanel.add(scorelabel1[row],"gapleft 0,w 35px, hmin 35px,split 18");
scoresPanel.add(scorelabel2[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel3[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel4[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel5[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel6[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
//another 12 Jlabels }
}
但是,如果我将代码放在一个方法中并按如下方式调用它,即使我尝试过 revalidate() repaint() 和 setVisible(true),Jlabels 也不会显示
public void buildScoresPanelMIG(JPanel scoresPanel) {
for (row = 0; row<(int)numberofrows; row++){
addScoreLabels();
}
}
public void addScoreLabels(){
scoresPanel.add(scorelabel1[row],"gapleft 0,w 35px, hmin 35px,split 18");
scoresPanel.add(scorelabel2[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel3[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel4[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel5[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
scoresPanel.add(scorelabel6[row],"gap before 0px,gapleft 0,w 35px, hmin 35px");
//another 12 labels
//scoresPanel.revalidate();
//scoresPanel.repaint();
//scoresPanel.setVisible(true);
}
我在互联网上搜索了很长一段时间试图解决这个问题,我意识到我对 Swing 组件的工作原理有一个基本的误解,如果有人能解释一下,我将不胜感激。