有人可以看看我的代码的这一部分,告诉我为什么它不会返回JPanel中的对象吗?它肯定进入循环内部,因为我尝试在里面打印语句。此外,这个 JPanel 对象被放在一个选项卡式窗格中只是为了澄清。如果我需要更详细地解释或显示更多代码以找到解决方案,请告诉我。谢谢。
JPanel createTipTailoringPanel(TipCalcModel model)
{
JPanel content = new JPanel();
int size = model.getNumOfPeople();
content.removeAll();
content.updateUI();
content.setLayout(new GridLayout(0,4));
JTextField text[] = new JTextField[size];
JSlider slider[] = new JSlider[size];
JLabel label[] = new JLabel[size];
JLabel cash[] = new JLabel[size];
if(size == 0)
{
return content;
}
else
{
for(int i=0; i<size; i++)
{
text[i] = new JTextField();
slider[i] = new JSlider();
label[i] = new JLabel("$");
cash[i] = new JLabel();
content.add(text[i]);
content.add(slider[i]);
content.add(label[i]);
content.add(cash[i]);
}
return content;
}
}
这是我的调用方法和用于传入人数的操作侦听器:
TipCalcView(TipCalcModel model)
{
setTitle("Tip Calculator");
JTabbedPane tabbedPane = new JTabbedPane();
getContentPane().add(tabbedPane);
tabbedPane.addTab("Main Menu", createMainPanel());
tabbedPane.setSelectedIndex(0);
tabbedPane.addTab("Tip Tailoring", createTipTailoringPanel(model));
tabbedPane.addTab("Config Panel", createConfigPanel());
}
class GuestsListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int userInput = 0;
try{
userInput = m_view.getGuests();
m_model.setNumOfPeople(userInput);
m_view.createTipTailoringPanel(m_model);
}
catch(NumberFormatException nfex)
{
m_view.showError("Bad input: '" + userInput + "'");
}
}
}
我怀疑您的问题超出了您列出的代码。下面是一个简化的工作示例:
public static void main(String[] args) {
JFrame frame = new JFrame();
DynamicJPanel dynamic = new DynamicJPanel();
frame.add(dynamic.createTipTailoringPanel(3));
frame.pack();
frame.setVisible(true);
}
JPanel createTipTailoringPanel(int size) {
JPanel content = new JPanel();
content.setLayout(new GridLayout(0, 4));
for (int i = 0; i < size; i++) {
content.add(new JTextField());
content.add(new JSlider());
content.add(new JLabel("$"));
content.add(new JLabel());
}
return content;
}
首先,由于您不在任何地方使用数组,因此可以将其缩短为:
JPanel createTipTailoringPanel(TipCalcModel model)
{
JPanel content = new JPanel();
int size = model.getNumOfPeople();
content.setLayout(new GridLayout(0,4));
if(size == 0)
{
return content;
}
else
{
for(int i=0; i<size; i++)
{
content.add(new JTextField());
content.add(new JSlider());
content.add(new JLabel("$"));
content.add(new JLabel());
}
return content;
}
}
其次,似乎您在面板中添加一个空组件,也许这就是您实际得到的?
第三,添加 您需要在 JFrame(或其他容器)从上述方法返回后将 content
面板添加到 JFrame(或其他容器)中。