动态 JPanel 与对象不显示



有人可以看看我的代码的这一部分,告诉我为什么它不会返回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(或其他容器)中。

相关内容

  • 没有找到相关文章