इसलिए मैंने एक प्रोग्राम बनाया जहां एक जीयूआई है जहां उपयोगकर्ता आतिशबाजी लॉन्च के लिए पैरामीटर दर्ज कर सकता है, और स्क्रीन के बीच में एक पैनल होता है जहां बटन दबाए जाने पर लॉन्च खींचा जाना चाहिए। मेरे कार्यक्रम में हालांकि जेपीनल अपडेट नहीं हो रहा है और कुछ भी नहीं खींचा जा रहा है। कोड नीचे है

//This is the method that build the JPanel in the center for the launch
public JPanel buildCenter() {
    JPanel center=new JPanel();
    center.setBackground(Color.black);
    center.setVisible(true);
    return center;
}


//This is the method the build the GUI, the buttons and such are in the other panels labeled top, west, east, etc.
public void buildGUI(){
    configureSliders();
    configureRadioButtons();
    JFrame frame=new JFrame();
    JPanel panel=new JPanel();
    JPanel top=new JPanel();
    panel.setLayout(new BorderLayout());
    Fireworks.setFont(new Font("Helvetica", Font.BOLD, 30));
    frame.setLayout(new BorderLayout());
    top.setLayout(new BoxLayout(top, BoxLayout.X_AXIS));
    top.add(Box.createHorizontalGlue());
    top.add(Fireworks);
    top.add(Box.createHorizontalGlue());
    frame.add(top, BorderLayout.NORTH);
    frame.add(panel, BorderLayout.CENTER);
    frame.setSize(1920,1080);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    panel.add(buildCenterTop(),BorderLayout.NORTH);
    panel.add(buildCenter(), BorderLayout.CENTER);
    panel.add(buildwest(), BorderLayout.WEST);
    panel.add(buildeast(),BorderLayout.EAST);
    panel.add(Launch, BorderLayout.SOUTH);
    Launch.addActionListener(this);
}
//this is the action performed method where repaint won't work. fire is my fireworks object with the paintcomponent method for the launch.
@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(Launch)) {
        setColor();
        setTime();
        setExplosion();
        fire.setVelocity(veloslider.getValue());
        fire.setTheta(thetaslider.getValue());
        buildCenter().add(fire);
        buildCenter().repaint();
        buildCenter().validate();

    }
0
Joe Butler 14 नवम्बर 2018, 21:44

1 उत्तर

सबसे बढ़िया उत्तर

आपकी सभी buildCenter() विधि एक काले रंग की पृष्ठभूमि के साथ एक खाली पैनल बनाती है।

फिर आप इस खाली पैनल को फ्रेम में जोड़ें:

panel.add(buildCenter(), BorderLayout.CENTER);

फिर आपके एक्शन लिस्टनर में आप करते हैं:

buildCenter().add(fire);
buildCenter().repaint();
buildCenter().validate();

यह सब 3 और खाली पैनल बनाता है। आप 3 और पैनल नहीं बनाना चाहते हैं। आप मौजूदा पैनल में घटक जोड़ना चाहते हैं।

आपको क्या करना है अपने "केंद्र" पैनल का एक उदाहरण बनाना है और फिर एक चर रखना है जो इस पैनल को संदर्भित करता है ताकि आप भविष्य में पैनल को अपडेट कर सकें।

तो आपको अपनी कक्षा में परिभाषित करने के लिए एक आवृत्ति चर की आवश्यकता है:

private JPanel centerPanel;

फिर बिल्डगुई() विधि में आप पैनल बनाते हैं:

//panel.add(buildCenter(), BorderLayout.CENTER);
centerPanel = buildCenter();
panel.add(buildCenter, BorderLayout.CENTER);

फिर अपने ActionListener में आप केंद्र पैनल में घटक जोड़ सकते हैं:

//buildCenter().add(fire);
//buildCenter().repaint();
//buildCenter().validate();
centerPanel.add( fire );
centerPanel.revalidate();
centerPanel.repaint();
0
camickr 14 नवम्बर 2018, 20:08