दिलचस्प पोस्ट
php: json सरणी के माध्यम से लूप Rails के बाहर रूबी स्क्रिप्ट में ActiveRecord का उपयोग कैसे करें? आईफ़ोन: एक स्थानीय सूचना के माध्यम से एप्लिकेशन बैज को बढ़ाना जावा ध्वनि एपीआई का उपयोग कर एमपी 3 बजाना Nth से अंतिम तक सभी कॉलम प्रिंट करने के लिए awk का उपयोग करना CSS3 रूपांतरण: घुमाएगी; IE9 में मोंगोडाबी अद्वितीय कुंजी जोड़ने के बाद भी डुप्लिकेट दस्तावेज़ JQuery में चालू () में चालू () चालू करना सीएसएस: देखें ऊँचाई (वीएच) और दृश्य चौड़ाई (वीडब्ल्यू) इकाइयां व्यापक रूप से समर्थित हैं? मैं atoi () का उपयोग क्यों नहीं करना चाहिए? 5 सेकंड की देरी के बिना होम बटन दबाए जाने के बाद किसी सेवा की गतिविधि शुरू करना #pragma एक बार बनाम गार्ड शामिल हैं? एंड्रॉइड पृष्ठभूमि सेवा तब शुरू हो रही है जब एप्लिकेशन को मार दिया जाता है PHP रेगेक्स: \ r और \ n का उपयोग किए बिना कैसे का उपयोग करें? JAXB का उपयोग करके सीडीएटीए ब्लॉक कैसे उत्पन्न किया जाता है?

ग्राफिक्स को आकर्षित करने के लिए जावा विधि को बुला रहा है

मैं एक फ्रेम में कुछ साधारण ग्राफिक्स को आकर्षित करने की कोशिश कर रहा हूं। मैं अपनी मुख्य विधि से जो कुछ चित्रित कर रहा हूं उसे समायोजित करने में भी सक्षम होना चाहूंगा उदाहरण के लिए, मुद्रित करने के लिए स्ट्रिंग वैरिएबल सेट करना, या एक आयताकार के निर्देशांक।

मुझे लगता है कि यह समस्या यह है कि मैं paintComponent विधि से पहले वर्ग चर सेट कर सकता हूं। मैं इस कोड को बदलने के लिए कैसे JPanel / JFrame चर सेट करने में सक्षम होने से पहले स्क्रीन पर आ जाएगा?

धन्यवाद

 import java.awt.*; import javax.swing.*; public class Test { public static void main(String[] args) { FrameTest test_frame = new FrameTest(); test_frame.test_string = "I WANT TO DRAW THIS STRING"; } } class FrameTest extends JFrame{ private static final long serialVersionUID = 1L; String test_string; public FrameTest(){ this.test_string = "TEMP STRING FROM FRAME"; JFrame gui = new JFrame(); gui.setTitle("Test Title"); gui.setSize(400,400); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Painting painting = new Painting(); Container pane = gui.getContentPane(); pane.setLayout(new GridLayout(1,1)); pane.add(painting); gui.setVisible(true); } } class Painting extends JPanel{ private static final long serialVersionUID = 1L; String test_string; public Painting(){ setBackground(Color.WHITE); this.test_string = "TEMP STRING FROM PANEL"; } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); g.drawString(test_string, 20, 20); } } 

वेब के समाधान से एकत्रित समाधान "ग्राफिक्स को आकर्षित करने के लिए जावा विधि को बुला रहा है"

FrameTest कक्षा से test_string निकालें सेट करें test_string सीधे सेट विधि का उपयोग कर। उदाहरण देखें:

 import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; public class Test { public static void main(String[] args) { FrameTest1 test_frame = new FrameTest1(); test_frame.setContentString("I WANT TO DRAW THIS STRING"); } } class FrameTest1 extends JFrame { private static final long serialVersionUID = 1L; Painting painting = new Painting(); public FrameTest1() { JFrame gui = new JFrame(); gui.setTitle("Test Title"); gui.setSize(400, 400); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = gui.getContentPane(); pane.setLayout(new GridLayout(1, 1)); pane.add(painting); gui.setVisible(true); } public void setContentString(String value) { painting.test_string = value; } } class Painting extends JPanel { private static final long serialVersionUID = 1L; String test_string; public Painting() { setBackground(Color.WHITE); this.test_string = "TEMP STRING FROM PANEL"; } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); g.drawString(test_string, 20, 20); } } 

यहां आप test_string में FrameTest लिए test_string स्ट्रिंग निर्दिष्ट कर रहे हैं जो Painting में समान नाम के वैरिएबल को अद्यतन नहीं कर रहा है:

 test_frame.test_string = "I WANT TO DRAW THIS STRING"; 

FrameTest लिए अपडेट विधि को क्यों न जोड़ें, क्योंकि इसका संदर्भ आपके पास है:

 public void setTestString(String test_string) { painting.setTestString(test_string); } 

और कॉल करें:

 FrameTest test_frame = new FrameTest(); test_frame.setTestString("I WANT TO DRAW THIS STRING"); 

नोट: जावा कैमल सीज़ का उपयोग करता है, जैसे testString

आप टेक्स्ट को पास कर सकते हैं जिसे आप कन्स्ट्रक्टर के माध्यम से पेंटिंग क्लास पर आकर्षित करना चाहते हैं और पेंटिंग को फ्रेमसेट पर उसी तरह से भी पास कर सकते हैं।

जावा कन्स्ट्रक्टर और पैरामीटर के बारे में अधिक जानने के लिए इसे पढ़ें: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

मैंने आपके कोड को जो आपके लिए जरूरी था, इसे संशोधित किया है, मैंने हालांकि इसका परीक्षण नहीं किया है।

 import java.awt.*; import javax.swing.*; public class Test { public static void main(String[] args) { Painting painting = new Painting("I WANT TO DRAW THIS STRING"); FrameTest test_frame = new FrameTest(painting); } } class FrameTest extends JFrame{ private static final long serialVersionUID = 1L; String test_string; public FrameTest(painting){ super(); this.test_string = "TEMP STRING FROM FRAME"; JFrame gui = new JFrame(); gui.setTitle("Test Title"); gui.setSize(400,400); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = gui.getContentPane(); pane.setLayout(new GridLayout(1,1)); pane.add(painting); gui.setVisible(true); } } class Painting extends JPanel{ private static final long serialVersionUID = 1L; String test_string; public Painting(String test_string){ super(); this.test_string = test_string; setBackground(Color.WHITE); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); g.drawString(test_string, 20, 20); } } 

उदाहरण के लिए, मुद्रित करने के लिए स्ट्रिंग वैरिएबल सेट करना, या एक आयताकार के निर्देशांक।

main(String[]) में एक JLabel Painting.setImage(Image) बनाएं, Painting.setImage(Image) लिए एक विधि है JLabel Painting.setImage(Image) , JLabel में छवि प्रदर्शित करें

यह अधिक बहुमुखी है क्योंकि यह एक स्ट्रिंग की छवि, या दीर्घवृत्त की छवि, या एक ढाल बीजी पर अंडाकार के भाग पर स्ट्रिंग की एक छवि को स्वीकार कर सकता है ..

कई चित्र प्रदर्शित करना

कई (ठीक 3) छवियाँ

 import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.util.Random; public class ImageViewer { JPanel gui; /** Displays the image. */ JLabel imageCanvas; /** Set the image as icon of the image canvas (display it). */ public void setImage(Image image) { imageCanvas.setIcon(new ImageIcon(image)); } public void initComponents() { if (gui==null) { gui = new JPanel(new BorderLayout()); gui.setBorder(new EmptyBorder(5,5,5,5)); imageCanvas = new JLabel(); JPanel imageCenter = new JPanel(new GridBagLayout()); imageCenter.add(imageCanvas); JScrollPane imageScroll = new JScrollPane(imageCenter); imageScroll.setPreferredSize(new Dimension(300,100)); gui.add(imageScroll, BorderLayout.CENTER); } } public Container getGui() { initComponents(); return gui; } public static Image getRandomImage(Random random) { int w = 100 + random.nextInt(400); int h = 50 + random.nextInt(200); BufferedImage bi = new BufferedImage( w,h,BufferedImage.TYPE_INT_RGB); return bi; } public static void main(String[] args) throws Exception { Runnable r = new Runnable() { @Override public void run() { JFrame f = new JFrame("Image Viewer"); // TODO Fix kludge to kill the Timer f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final ImageViewer viewer = new ImageViewer(); f.setContentPane(viewer.getGui()); f.pack(); f.setLocationByPlatform(true); f.setVisible(true); ActionListener animate = new ActionListener() { Random random = new Random(); @Override public void actionPerformed(ActionEvent arg0) { viewer.setImage(getRandomImage(random)); } }; Timer timer = new Timer(1500,animate); timer.start(); } }; SwingUtilities.invokeLater(r); } }