Как позвонить в JPanel из другого класса - PullRequest
0 голосов
/ 09 января 2019

У меня есть JPanel с JButton, добавленным к нему в одном классе. У меня есть JFrame в другом классе и метод, который позволяет вам получить JPanel из второго класса. Когда я устанавливаю область содержимого JFrame на JPanel, его черный цвет, однако, если я помещаю JFrame в класс JPanel, он работает правильно. Любая помощь приветствуется, спасибо.

Первый класс:

public class one {
private static JPanel p = new JPanel();

public one() {

    p.setVisible(true);
    p.setBackground(Color.BLACK);
    p.setLayout(new GridLayout(3, 3, 25, 25));

    JButton b = new JButton("Testing");
    b.setBounds(60, 60, 100, 100);
    b.setVisible(true);



    p.add(b);


}
public static JPanel getP() {
    return p;
}
}

Второй класс:

public class two {

public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().setLayout(null);
    f.setBounds(10, 10, 500, 500);
    f.setContentPane(one.getP());



    f.setVisible(true);
}

}

1 Ответ

0 голосов
/ 10 января 2019

попробуйте удалить статическое ключевое слово из одного класса, потому что вы выполняете операции jpanel в своем конструкторе. Помните, конструктор вызывается, когда вы создаете новый объект из этого класса. Поскольку вы сделали jpanel статическим и вызвали jpanel без создания нового экземпляра, ваши операции jpanel не выполняются. Таким образом, ваш код может быть ниже:

public one() {

    p.setVisible(true);
    p.setBackground(Color.BLACK);
    p.setLayout(new GridLayout(3, 3, 25, 25));

    JButton b = new JButton("Testing");
    b.setBounds(60, 60, 100, 100);
    b.setVisible(true);



    p.add(b);


}
public JPanel getP() {
    return p;
}
}

public static void main(String[] args) {
    JFrame f = new JFrame();
    one o = new one();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().setLayout(null);
    f.setBounds(10, 10, 500, 500);
    f.setContentPane(o.getP());



    f.setVisible(true);
}

}
...