Динамическая JPanel с не отображаемыми объектами - PullRequest
1 голос
/ 08 мая 2011

Может кто-нибудь взглянуть на эту часть моего кода и сказать мне, почему он не возвращает объекты внутри JPanel? Это определенно идет в цикле, так как я пытался печатать заявления внутри. Также этот объект JPanel помещается внутри TabbedPane только для пояснения. Дайте мне знать, если мне нужно объяснить более подробно или показать больше кода, чтобы найти решение. Спасибо.

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 + "'");
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Я подозреваю, что ваша проблема не в коде, который вы перечислили. Вот упрощенный рабочий пример:

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;
}
3 голосов
/ 08 мая 2011

Во-первых, поскольку вы нигде не используете массивы, его можно сократить до:

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;
    }
}

Во-вторых, похоже, что вы добавляете пустые компоненты на панель, может, это то, что вы на самом деле получаете?

В-третьих, добавьте, что вам нужно добавить панель content в JFrame (или другой контейнер), как только она вернется из метода, описанного выше.

...