यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
Whiteboard
Whiteboard एक मुक्त चित्रण सतह है: उपयोगकर्ता अपनी उंगली/पॉइंटर खींचता है और घटक बिंदुओं को दर्ज करता है, स्ट्रोक को चिकना करता है (पड़ोसियों का भारित औसत) और उसे एक आंतरिक Image पर रेंडर करता है। यह हस्ताक्षर कैप्चर, हस्त-टिप्पणियों और छोटे रेखाचित्रों का आधार है। प्रत्येक पूर्ण स्ट्रोक (onTouchUp पर) छवि में “जला दिया” जाता है, ताकि इतिहास हर फ़्रेम पर सभी बिंदुओं को पुनः संसाधित किए बिना संचित हो।
आप पेन के रंग (setPenColor), मोटाई (thick फ़ील्ड) को नियंत्रित करते हैं और साफ़ कर सकते हैं (clear()) या पृष्ठभूमि छवि को निर्यात/परिभाषित कर सकते हैं (getImage/setImage)।
🟢 · पैकेज:
dev.crossfly.ui· विस्तार करता है:Component· स्टाइल:ComponentStyle(डिफ़ॉल्ट रूप से सफ़ेद पृष्ठभूमि)
कब उपयोग करें
- एक हस्ताक्षर या मुक्त हस्त-चित्र कैप्चर करना।
- किसी मौजूदा छवि पर टिप्पणी करना (उसे
setImageके माध्यम से पास करें)।
कब उपयोग न करें
- संरचित डेटा प्रदर्शित/प्लॉट करना →
chartviewका उपयोग करें।
दिखावट
घटक के आकार की सफ़ेद पृष्ठभूमि (backColor)। स्ट्रोक चिकनी रेखाएँ हैं जिनकी मोटाई Styles.fontHeight/3 (मोटा) या Styles.fontHeight/10 (पतला) होती है, पेन के रंग में (अल्फा को अपारदर्शी के लिए बाध्य किया गया)। घटक में hasPan(true) है, यानी यह चित्र बनाने के लिए खींचने के इशारे को कैप्चर करता है।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
Whiteboard एक सामान्य घटक है: यह शरीर को घेरने के लिए add(LAY_FILL, ...) के साथ सीधे स्क्रीन में जाता है। यह उदाहरण बुनियादी उपयोग (नीला पेन, मोटा स्ट्रोक) का पुनः उपयोग करता है और साफ़ करने के लिए एक बटन जोड़ता है।
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
Whiteboard board = new Whiteboard();
board.setPenColor(0x0000FF); // नीला (ड्रॉइंग में alpha को अपारदर्शी पर बाध्य किया जाता है)
board.thick = true; // मोटी लकीर
Button limpar = new Button("Limpar")
.onAction(c -> board.clear());
add(LAY_AUTO, limpar);
add(LAY_FILL, board); // स्क्रीन का मुख्य भाग घेरता है
}
}
नीचे दिए गए अंश केवल मुख्य भाग दिखाते हैं (जो
onShow()के अंदर जाता है)। चलाने के लिए, उन्हें ऊपर दिए गएMainWindowढाँचे में रखें।
बुनियादी उपयोग
Whiteboard board = new Whiteboard();
board.setPenColor(0x0000FF); // नीला (ड्रॉइंग में alpha को अपारदर्शी पर बाध्य किया जाता है)
board.thick = true; // मोटी लकीर
container.add(LAY_FILL, board);
// कहीं और, साफ़ करने के लिए एक बटन:
btnLimpar.onAction(c -> board.clear());
कंस्ट्रक्टर
| कंस्ट्रक्टर | विवरण |
|---|---|
Whiteboard() |
सफ़ेद पृष्ठभूमि और hasPan(true) के साथ सतह बनाता है (चित्रण के लिए तैयार)। |
गुण और अनुकूलन
| गुण / मेथड | प्रकार | डिफ़ॉल्ट | क्या करता है |
|---|---|---|---|
setPenColor(int) |
void |
BLACK |
पेन का रंग परिभाषित करता है (चित्रण अल्फा को अपारदर्शी बाध्य करता है)। |
getPenColor() |
int |
— | पेन का वर्तमान रंग लौटाता है। |
thick |
boolean (फ़ील्ड) |
false |
true = मोटा स्ट्रोक (fontHeight/3); false = पतला (fontHeight/10)। |
clear() |
void |
— | छवि और संचित बिंदुओं को साफ़ करता है। |
getImage() |
Image |
null |
चित्रण छवि लौटाता है (यदि कुछ नहीं बनाया गया तो null हो सकता है)। |
setImage(Image) |
void |
— | पृष्ठभूमि/आधार छवि परिभाषित करता है (खाली सतह के लिए null पास करें)। throws ImageException। |
Whiteboard.debugPoints |
boolean स्थैतिक |
false |
डिबगिंग: बिंदुओं की गिनती/रेंडरिंग समय प्रदर्शित करता है। |
कॉलबैक और इवेंट
Whiteboard इशारों को आंतरिक रूप से संभालता है; यह “स्ट्रोक पूर्ण” का कोई कॉलबैक उजागर नहीं करता।
| इवेंट (आंतरिक) | व्यवहार |
|---|---|
onTouchDown(x,y,button) |
एक नया स्ट्रोक शुरू करता है और पहला बिंदु दर्ज करता है। |
onPan(x,y,dx,dy) |
उपयोगकर्ता के खींचने के दौरान बिंदुओं को संचित करता है और पुनः रंगता है। |
onTouchUp(x,y,button) |
स्ट्रोक को अंतिम रूप देता है और चित्रण को आंतरिक Image में “जला देता है”। |
स्थितियाँ
- चित्रण करते हुए:
onTouchDownऔरonTouchUpके बीच, बिंदु एक अस्थायी बफ़र में रहते हैं और प्रत्येकonPanपर चिकने/रेंडर किए जाते हैं। - समेकित:
onTouchUpमें, स्ट्रोकImageमें दर्ज होता है और बफ़र साफ़ हो जाता है (प्रति फ़्रेम लागत स्ट्रोक की कुल संख्या के साथ नहीं बढ़ती)।
रंग चयन और निर्यात के साथ हस्ताक्षर पैनल
Whiteboard assinatura = new Whiteboard();
assinatura.thick = false; // हस्ताक्षर के लिए पतला स्ट्रोक
container.add(LAY_FILL, assinatura);
btnPreto.onAction(c -> assinatura.setPenColor(0x000000));
btnAzul.onAction (c -> assinatura.setPenColor(0x0000FF));
btnLimpar.onAction(c -> assinatura.clear());
// पुष्टि पर, परिणामी इमेज पुनः प्राप्त करें:
btnOk.onAction(c -> {
Image desenho = assinatura.getImage(); // अगर कुछ नहीं बनाया गया तो null हो सकता है
if (desenho != null)
salvarAssinatura(desenho);
});
अच्छी प्रथाएँ
- हस्ताक्षर के लिए
thick = false(अधिक सटीक स्ट्रोक) और व्यापक रेखाचित्रों के लिएthick = trueपसंद करें। - निर्यात से पहले हमेशा
getImage() != nullजाँचें: यदि उपयोगकर्ता ने कुछ नहीं बनाया, तो छवि अभी भीnullहै। - एक
clear()बटन प्रदान करें — प्रति स्ट्रोक कोई “पूर्ववत करें” नहीं है।
आम गलतियाँ
- पारदर्शिता की अपेक्षा में स्पष्ट अल्फा वाला रंग पास करना: चित्रण अल्फा को अपारदर्शी बाध्य करता है (
0xFF000000 | cor)। - स्ट्रोक कॉलबैक की अपेक्षा करना: इंटरैक्शन के बाद मेथड (
getImage) का उपयोग करें; स्ट्रोक पूर्णता का कोईonActionनहीं है।