public class Creator extends JFrame {
JLabel[] pos;
JTextField[] monInitFi;
JPanel panel, statusP, inputP;
JTextField numMonsFi;
JButton goB, initRollB;
int numMons;
public Creator() {
panel = new JPanel();
createInputP();
panel.add(inputP);
add(panel);
}
//The Input board
public JPanel createInputP() {
inputP = new JPanel();
numMonsFi = new JTextField(3);
inputP.add(numMonsFi);
goB = new JButton("Go");
goB.addActionListener(new goBListener());
inputP.add(goB);
return inputP;
}
//Creates the initiative input board.
public JPanel createStatusP() {
statusP = new JPanel();
monInitFi = new JTextField[numMons];
for (int i = 0; i < numMons; i++) {
monInitFi[i] = new JTextField(3);
statusP.add(monInitFi[i]);
}
initRollB = new JButton("Roll");
statusP.add(initRollB);
return statusP;
}
//The button listener, should update numMons, and create and add the initiative panel.
public class goBListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
numMons = Integer.parseInt(numMonsFi.getText());
createStatusP();
panel.add(statusP);
}
}
public static void main(String[] args) {
Creator c = new Creator();
c.setVisible(true);
c.setSize(1000, 600);
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setTitle("D&D 4e Encounter Tracker");
}
}
所以这只是我尝试做的一个例子,但我甚至无法使基础工作。当我运行此statusP(JPanel)
时,createStatusP()
没有出现,我不确定它是否因为它没有运行,或者因为它无法正常工作。
我已经尝试将GUI constructor
方法放在JButton
中,但只有{{1}}会出现,好像for循环没有运行。
非常感谢任何帮助。
答案 0 :(得分:0)
在goBListener
的{{1}}方法中,您应该在添加{{1}后调用actionPerformed
强制重新插入面板,这将触发重新绘制面板。
您还应该尝试遵循Java命名约定,panel.revalidate()
应该以大写字母statusP
开头,这将使其他人更容易阅读(但也会让您更容易阅读其他人的代码)
您可以考虑使用goBListener
中的一些来代替数组,这是个人的事情,但GoBListener
通常更灵活。请查看Collections了解更多详情
答案 1 :(得分:0)
这是因为您拨打了createInputP()
这是一个程序,但事实并非如此!它是一个函数,它会返回一些东西,在这种情况下是inputP面板!所以实际发生的是构造函数中的可覆盖方法调用!所以解决方案是在createInputP()方法!!
// final keyword after public keyword!
public final JPanel createInputP(){ ..... }
并修改goBListener,如下所示:
public class goBListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
numMons = Integer.parseInt(numMonsFi.getText());
panel.revalidate();
panel.add(createStatusP());
}
}
D !!那就是!!