เครื่องมือกล่องข้อความสำหรับแอปพลิเคชันการวาดภาพ - JavaFX

ฉันกำลังพยายามสร้างฟังก์ชันการวาดภาพบางอย่าง ซึ่งคล้ายกับ MSPaint มาก ฉันต้องการสร้างเครื่องมือ TextBox เพื่อให้ฉันสามารถวาดกล่องข้อความบนผืนผ้าใบของฉันและให้ผู้ใช้พิมพ์ลงในนั้นเหมือนกล่องข้อความจริง เมื่อผู้ใช้คลิกออกจากกล่องข้อความหรือกด Escape ฉันจะ "stroke" ข้อความไปที่ GraphicsContext

ฉันไม่แน่ใจว่าต้องทำอย่างไร ความพยายามในปัจจุบันของฉันให้ฉันใช้ StackPane เพื่อซ้อนผืนผ้าใบสองผืนทับกัน ฉันปล่อยให้ผู้ใช้ "draw" ใช้เมาส์ในกล่องข้อความ จากนั้นฉันก็สร้างกล่องข้อความโดยทางโปรแกรมซึ่งฉันพยายามส่ง keyevents เข้าไป จากนั้นเมื่อผู้ใช้คลิกปิด ฉันจะเขียน textbox.getText() ไปที่ GraphicsContext สิ่งนี้ยังไม่ประสบความสำเร็จมากนัก โดยเฉพาะอย่างยิ่ง ฉันไม่แน่ใจว่าจะจัดการคีย์พิเศษ เช่น BACKSPACE และ DELETE อย่างไร และให้ผู้ใช้คลิกเพื่อวางเคอร์เซอร์ได้อย่างไร

ฉันกำลังมองหาคำแนะนำเกี่ยวกับแนวทางที่ดีกว่า


person Derek    schedule 19.03.2016    source แหล่งที่มา
comment
นี่อาจเป็นความคิดเห็นที่ฟังดูเจ็บปวดเล็กน้อย (ฉันจำได้ว่าถามเส้นทางครั้งหนึ่งแล้วมีคนบอก ฉันจะไม่เริ่มจากตรงนี้) - บางทีผืนผ้าใบอาจไม่ใช่แนวทางที่ดีที่สุดสำหรับเรื่องนี้ หากคุณไม่ได้อยู่ไกลจากโปรเจ็กต์มากนัก การใช้ Pane และเพิ่มโหนด (Shape คลาสย่อย, Text สำหรับข้อความของคุณ ฯลฯ) อาจจะง่ายกว่า แต่แน่นอนว่าคุณอาจมีเหตุผลดีๆ อื่นๆ ในการใช้ผืนผ้าใบ   -  person James_D    schedule 19.03.2016
comment
ฉันต้องการสร้าง MS Paint ขึ้นมาใหม่อย่างมีประสิทธิภาพ พร้อมฟีเจอร์เพิ่มเติมบางอย่าง ฉันยังต้องการความสามารถในการเปลี่ยน 'ผืนผ้าใบ' (หรืออะไรก็ตาม) เป็นสิ่งที่ฉันสามารถส่งผ่านซ็อกเก็ตได้อย่างง่ายดาย ฉันกังวลเกี่ยวกับสิ่งต่างๆ เช่น Paint Bucket และฉันจะนำไปใช้กับโซลูชัน 'Pane' ได้อย่างไร   -  person Derek    schedule 19.03.2016
comment
ถังสีก็คงจะยากเหมือนกัน ฉันคิดว่า... ไม่แน่ใจ หากสามารถส่งเป็นข้อมูลรูปภาพได้ คุณสามารถ snapshot โหนดใดๆ เพื่อสร้างอิมเมจ JavaFX แปลง เป็น BufferedImage และใช้ ImageIO เพื่อส่ง   -  person James_D    schedule 19.03.2016
comment
ฉันอยากจะบันทึกมันเป็นชุดคำสั่งแล้วส่งไป ฉันจำเป็นต้องซิงโครไนซ์สิ่งนี้ผ่านเครือข่ายได้ (ดังนั้นการส่งรูปภาพอย่างเดียวยังไม่เพียงพอหากเป็นบานหน้าต่าง) และจะต้องอำนวยความสะดวกในการเลิกทำและทำซ้ำด้วย ฉันทำให้ Paint Bucket ทำงานโดยใช้อัลกอริธึม Flood Fill หลังจากเรียกสแน็ปช็อตบนผืนผ้าใบ แต่ฉันไม่รู้ว่าจะนำสิ่งนั้นไปใช้กับสิ่งที่ไม่ใช่รูปภาพได้อย่างไร   -  person Derek    schedule 19.03.2016
comment
นี่เป็นคำถามที่ค่อนข้างเปิดกว้าง ดังนั้นจึงเป็นเรื่องยากที่จะตอบ โดยเฉพาะอย่างยิ่งเมื่อคำนึงถึงความปรารถนาเพิ่มเติมในส่วนความคิดเห็นด้วย อาจเป็น StackPane ที่มีผืนผ้าใบอยู่ด้านล่างและส่วนการแก้ไขแบบไดนามิกอยู่ด้านบน ซึ่งคุณสามารถวาง ข้อความที่แก้ไขได้ และเมื่อ onAction ถูกเริ่มทำงาน ให้ลบฟิลด์ข้อความและลากข้อความลงบนผืนผ้าใบ   -  person jewelsea    schedule 19.03.2016
comment
เพียงใช้ TextField / TextArea แล้วลบพื้นหลัง/เส้นขอบออก   -  person fabian    schedule 19.03.2016