java - Is there a way for a JTextField in an 11x11 grid to have a background object, such as a circle or square? -


यह मैंने बनाया है JTextField वस्तुओं का एक 11x11 ग्रिड है

यहां मैंने एक ग्रिड बनाया है

रंग हैं अच्छा, लेकिन आकृति बेहतर (या दोनों) होगी: यहां छवि विवरण दर्ज करें

< मजबूत> मुझे नहीं लगता कि मौजूदा कोड को जोड़ने का कोई भी तरीका है (जैसे, .पीएनजी) एक JTextField या JPanel में, वहाँ है? मुझे क्या करना चाहिए? मैंने अभी तक ग्राफिक्स कक्षा में प्रवेश नहीं किया है और मैं नहीं चाहता था, अभी। लेकिन अगर यह एकमात्र तरीका है, ठीक है।

मैं मान रहा हूं कि उपयोगकर्ता टाइपिंग में होगा प्रत्येक पाठ क्षेत्र का एक अक्षर। कुछ संभावनाएं हैं:

1) एक आइकनबॉर्डर बनाएं। यह पाठ फ़ील्ड के शीर्ष पर आपके दिए गए आइकन को चित्रित करेगा अवधारणा का सरल प्रमाण:

  आयात करें java.awt। *; Import java.awt.geom। *; आयात javax.swing। *; आयात javax.swing.border। *; पब्लिक क्लास आइकॉनबॉर्डर सीमा (निजी आइकन आइकन; निजी इन्सट्स सीमाएएनसेट = नयी इन्सट्स (0, 0, 0, 0); सार्वजनिक चिह्न (आइकन आइकन) {this.icon = icon; } // // बॉर्डर इंटरफ़ेस लागू करें // @ ओवरराइड पब्लिक इन्ससेट्स getBorderInsets (घटक सी) {वापसी सीमाएं; } @ ओवरराइड पब्लिक बूलियन isBorderOpaque () {वापसी झूठी; } @ ओवरराइड पब्लिक रिक्त पेंटबॉर्डर (घटक सी, ग्राफिक्स जी, इंट एक्स, इंट y, इंट चौड़ाई, इंटी ऊंचाई) {icon.paintIcon (c, g, x + 1, y + 1); } प्राइवेट स्टैटिक व्हॉइड बनाओ AndShowUI () {JPanel पैनल = नया जेपीनल (); Panel.add (createTextField (नया एलिपसे 2 डी। डबल (0, 0, 30, 30))); जेफ्रेम फ्रेम = नया जेफ्रैम ("एसएससीसीई"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Frame.add (पैनल); फ़्रेम.सेट स्थान स्थान प्लैटफ़ॉर्म (सत्य); frame.pack (); फ्रेम.सेस्विज़िबल (सच); } निजी स्थिर JTextField createTextField (आकार आकार) {JTextField textField = नया JTextField (1); TextField.setFont (नया फ़ॉन्ट ("सेरिफ़", फॉन्ट। PLAIN, 18)); आउटलाइन आइकन आइकन = नया आउटलाइन आइकन (आकृति, रंग। आरईडी, 2); कम्पाउंडबॉर्डर इनर = नए कंपाउंडबॉर्डर (टेक्स्टफिल्ड.टेटबॉर्डर ()), नए रिक्त बॉर्डर (5, 10, 5, 10)); यौगिक सीमा सीमा = नया कंपाउंडबॉर्डर (नया आइकॉनबॉर्डर (आइकन), आंतरिक); TextField.setBorder (सीमा); वापसी टेक्स्टफ़ील्ड; } सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {EventQueue.invokeLater (नया रननाबल) (सार्वजनिक शून्य रन () {createAndShowUI ();}}); }}   

बॉर्डर के चिह्न प्रदान करने के लिए उपरोक्त कोड में OutlineIcon वर्ग का उपयोग किया गया है। या फिर आप किसी भी "पारदर्शी" चिह्न का उपयोग कर सकते हैं जिसे आपने झूठ बोल दिया है।

लेकिन जैसा कि आप देख सकते हैं कि पाठ्य को ठीक ढंग से गठबंधन करने की कोशिश करने के लिए इनसेट्स के साथ बहुत सारे खेल रहे हैं। यदि आप बॉर्डर के दृष्टिकोण से जाना चाहते हैं, तो "सर्कलबॉर्डर" और "स्क्वायरबार्डर" बनाने के लिए बेहतर हो सकता है, फिर आप केवल पेंटबॉर्डर (...) विधि में आकृति को सीधे पेंट कर सकते हैं और चित्र के आधार पर कर सकते हैं मूल घटक का आकार।

2) एक अन्य तरीका आइकन के साथ जेएलैबल का उपयोग करना होगा आप जेएलैब के गुणों को सेट कर सकते हैं कि पाठ दोनों क्षैतिज रूप से और ऊर्ध्वाधर केन्द्रित है ताकि यह लेबल के शीर्ष पर पेंट कर सके। कुंजीपटल इनपुट का समर्थन करने के लिए, आपको तब प्रत्येक लेबल को ध्यान केंद्रित करने और कुंजी दबाकर कुंजी के लिए सुनने के लिए और फिर लेबल का पाठ सेट करना होगा। (मैं इस दृष्टिकोण को पसंद करता हूं क्योंकि घटकों के आकार को आसानी से आपके द्वारा उपयोग किए जाने वाले आइकन के आकार के आधार पर किया जाएगा)।

3) या अंत में आप जेएलैबल का इस्तेमाल ऊपर वाले चिह्न के साथ कर सकते हैं लेकिन फिर आप लेआउट मैनेजर को बॉर्डर लेआउट में सेट कर सकते हैं और फिर अपने JTextField को लेबल में जोड़ सकते हैं। आपको JTextField गैर अपारदर्शी बनाने की आवश्यकता होगी।

Comments

Popular posts from this blog

c - Mpirun hangs when mpi send and recieve is put in a loop -

python - Apply coupon to a customer's subscription based on non-stripe related actions on the site -

java - Unable to get JDBC connection in Spring application to MySQL -