मैं खिड़की में वस्तु को चित्रित करने के बाद रंग बदलने की कोशिश कर रहा हूं, यही वह है जिसके साथ मैं आया हूं, मैं शुरुआत कर रहा हूं इसलिए यह गन्दा है।

import java.awt.*;
import java.awt.event.*;
import java.awt.event.WindowEvent;
import java.util.Arrays;
import java.util.List;
public class TestGraphic extends Figure {

TestGraphic(){
    setSize(600,600);
    closeFrame();
}

public static void main(String[] args) {
    TestGraphic test = new TestGraphic();
    test.setVisible(true);

}
public void paint(Graphics gui) {
    drawComponent(gui);
    
}
public void drawComponent(Graphics gui) {
     gui.drawOval(108,110,200,200);
     gui.drawOval(160,150,20,20);
     gui.drawOval(240,150,20,20);
     gui.drawRect(160,220,100,40);
     Button btn = new Button("Change color");
     btn.setBounds(30,100,80,30);
     add(btn);
     changeColor(gui,btn);
    
     
}
@Override
void draw(Graphics gui) {
    // TODO Auto-generated method stub
    
}
@Override
public boolean contains(int x, int y) {
      
      return false;
}
 private void closeFrame(){
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      }); 
 }
 

 void changeColor(Graphics gui,Button btn) {
     List<Color> colorList;
     colorList = Arrays.asList(Color.black, Color.blue , Color.cyan, Color.red, Color.green, Color.magenta, Color.orange, Color.yellow);
      
      btn.addActionListener(new ActionListener() { 
             public void actionPerformed (ActionEvent e) {  
                 for(int i = 0;i < colorList.size(); i++) {
                    gui.setColor(colorList.get(i));
                }
                  }    
              }); 
     
    
}

}

वर्ग चित्र एक अमूर्त वर्ग है जो java.awt.Frame से विरासत में मिला है इस कोड को क्लीनर बनाने के तरीके के बारे में कोई टिप्पणी की सराहना की जाएगी, धन्यवाद।

0
Marwane 26 नवम्बर 2021, 23:52
2
मूल उत्तर है, आप नहीं। और निश्चित रूप से आप कोशिश नहीं करते हैं और इसे वैसे ही करते हैं जैसे आप हैं। एक पेंट पास (जैसे बटन जोड़ना) के भीतर से यूआई की स्थिति को संशोधित न करें। आप एडब्ल्यूटी का उपयोग क्यों कर रहे हैं? JavaFX को स्विंग या इवेंट क्यों नहीं?
 – 
MadProgrammer
26 नवम्बर 2021, 23:57
2
इस कोड को साफ-सुथरा बनाने के बारे में कोई टिप्पणी 1) एडब्ल्यूटी का प्रयोग न करें। इसके बजाय स्विंग या जावाएफएक्स का प्रयोग करें। 2) यदि स्विंग का उपयोग कर रहे हैं तो स्विंग ट्यूटोरियल पढ़ें। Custom Painting और How to Use Timers पर ऐसे अनुभाग हैं जो आपके रंगों को एनिमेट करने में मदद करेंगे। 3) पेंटिंग विधि में घटक न बनाएं। घटकों को बनाया जाना चाहिए और आपकी कक्षा के निर्माता में फ्रेम में जोड़ा जाना चाहिए।
 – 
camickr
26 नवम्बर 2021, 23:59
हमारे जावा प्रोफेसर हमें एडब्ल्यूटी के साथ काम करने के लिए मजबूर कर रहे हैं :(!
 – 
Marwane
27 नवम्बर 2021, 00:05
नए शिक्षक को खोजने का समय आ गया है। जबकि एडब्ल्यूटी स्विंग की नींव बनाता है, लगभग कोई भी वास्तव में इसका उपयोग नहीं करता है
 – 
MadProgrammer
27 नवम्बर 2021, 00:06
मुझे एडब्ल्यूटी का उपयोग करना है :(
 – 
Marwane
27 नवम्बर 2021, 00:06

1 उत्तर

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

इससे पहले कि आप कस्टम पेंटिंग के रूप में जटिल कुछ शुरू करें, सुनिश्चित करें कि आपको भाषा की मूल बातें और एपीआई की अच्छी समझ है

देखें स्विंग के साथ GUI बनाना, कस्टम पेंटिंग करना और एडब्ल्यूटी और स्विंग में पेंटिंग

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private Color desiredColor = Color.BLACK;
        private List<Color> avaliableColors = new ArrayList<>(16);

        public TestPane() {
            setLayout(new BorderLayout());
            avaliableColors.add(Color.BLACK);
            avaliableColors.add(Color.BLUE);
            avaliableColors.add(Color.CYAN);
            avaliableColors.add(Color.DARK_GRAY);
            avaliableColors.add(Color.GRAY);
            avaliableColors.add(Color.GREEN);
            avaliableColors.add(Color.LIGHT_GRAY);
            avaliableColors.add(Color.MAGENTA);
            avaliableColors.add(Color.ORANGE);
            avaliableColors.add(Color.PINK);
            avaliableColors.add(Color.RED);
            avaliableColors.add(Color.WHITE);
            avaliableColors.add(Color.YELLOW);

            JButton btn = new JButton("Change color");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // Randomise the colors
                    Collections.shuffle(avaliableColors);
                    desiredColor = avaliableColors.get(0);
                    repaint();
                }
            });
            add(btn, BorderLayout.SOUTH);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(desiredColor);
            g2d.drawOval(108, 110, 200, 200);
            g2d.drawOval(160, 150, 20, 20);
            g2d.drawOval(240, 150, 20, 20);
            g2d.drawRect(160, 220, 100, 40);
            g2d.dispose();
        }

    }
}

चूंकि आप अभी शुरुआत कर रहे हैं, इसलिए मैं इसके बजाय JavaFX से शुरुआत करने का सुझाव दे सकता हूं।

एडब्ल्यूटी

<मजबूत>!! चेतावनी !!

अब कोई भी एडब्ल्यूटी का उपयोग नहीं करता है और आपको यहां इसके लिए समर्थन के रास्ते में बहुत कुछ मिलने की संभावना नहीं है। यह पिछले उदाहरण से परिवर्तित एक "बुनियादी" अवधारणा है, सावधान रहें, एडब्ल्यूटी डिफ़ॉल्ट रूप से डबल बफर नहीं है

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JButton;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Frame frame = new Frame();
                frame.add(new TestCanvas());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestCanvas extends Container {

        private Color desiredColor = Color.BLACK;
        private List<Color> avaliableColors = new ArrayList<>(16);

        public TestCanvas() {
            setLayout(new BorderLayout());
            avaliableColors.add(Color.BLACK);
            avaliableColors.add(Color.BLUE);
            avaliableColors.add(Color.CYAN);
            avaliableColors.add(Color.DARK_GRAY);
            avaliableColors.add(Color.GRAY);
            avaliableColors.add(Color.GREEN);
            avaliableColors.add(Color.LIGHT_GRAY);
            avaliableColors.add(Color.MAGENTA);
            avaliableColors.add(Color.ORANGE);
            avaliableColors.add(Color.PINK);
            avaliableColors.add(Color.RED);
            avaliableColors.add(Color.WHITE);
            avaliableColors.add(Color.YELLOW);

            JButton btn = new JButton("Change color");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    // Randomise the colors
                    Collections.shuffle(avaliableColors);
                    desiredColor = avaliableColors.get(0);
                    repaint();
                }
            });
            add(btn, BorderLayout.SOUTH);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(400, 400);
        }

        @Override
        public void paint(Graphics g) {
            super.paint(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(desiredColor);
            g2d.drawOval(108, 110, 200, 200);
            g2d.drawOval(160, 150, 20, 20);
            g2d.drawOval(240, 150, 20, 20);
            g2d.drawRect(160, 220, 100, 40);
            g2d.dispose();
        }

    }
}
1
MadProgrammer 27 नवम्बर 2021, 00:14
मदद के लिए धन्यवाद ! मुझे सिर्फ यह पूछने की जरूरत है कि आपने 2 वर्गों का उपयोग क्यों किया, और पेंट विधि के अलावा स्वचालित रूप से कौन से ऑपरेशन किए जाते हैं? अग्रिम में धन्यवाद।
 – 
Marwane
27 नवम्बर 2021, 13:15