Java: getRowForLocation() ส่งคืน int แถวที่แตกต่างกันเมื่อ Jtree ขยายโหนดหรือโหนดที่ยุบ

JTree jtree มีตัวฟังเมาส์ติดอยู่ เมื่อผู้ใช้คลิกที่โหนดส่วนประกอบ Jtree ฉันจะได้รับจำนวนเต็มแถวผ่านทาง

 jtree.getRowForLocation(evt.getX(), evt.getY());

ปัญหาคือจำนวนเต็มแถวที่ส่งคืนจะแตกต่างกันเมื่อมีโหนด jtree ที่ถูกขยายและเมื่อมีการยุบ

ฉันต้องการวิธีรับ ID ที่ไม่ซ้ำใครและแน่นอนของแต่ละโหนด jtree ที่คลิกเพื่อไม่ให้เกิดความสับสน

มีวิธีเพิ่มข้อมูลลงในองค์ประกอบ Jtree หรือไม่?

ไม่เช่นนั้น ฉันต้องการวิธีฟังเมื่อมีการขยายโหนดและคำนวณแถวที่ส่งคืนจากฟังก์ชันด้านบนนั้นใหม่....


person KJW    schedule 28.05.2011    source แหล่งที่มา


คำตอบ (2)


ในแนวทางปัจจุบันของคุณ คุณต้องอาศัยสถานะของมุมมองแบบต้นไม้เพื่อระบุโหนด อย่างไรก็ตาม ดังที่คุณได้พบว่าสถานะของมุมมองสามารถเปลี่ยนแปลงได้ สิ่งที่ไม่เปลี่ยนแปลงคือโมเดลต้นไม้ที่อยู่ใต้มุมมอง

หากคุณต้องการ ID เฉพาะสำหรับแต่ละโหนด คุณควรเพิ่มรหัสนี้ให้กับแต่ละโหนดแผนผังในโมเดลแผนผังของคุณโดยตรง ใน Mouse Listener คุณสามารถตรวจพบโหนดที่คุณคลิกและเข้าถึง ID เฉพาะของมันได้

person Mark    schedule 28.05.2011
comment
ฉันจะเพิ่ม ID เฉพาะให้กับแต่ละโหนดโดยตรงได้อย่างไร โหนดต้นไม้นั้นถูกสร้างขึ้นจากไฟล์ xml ซึ่งสร้างโมเดลต้นไม้ขึ้นมา แบบจำลองต้นไม้นี้จะถูกเรนเดอร์เป็น Jtree - person KJW; 29.05.2011
comment
คุณสามารถเพิ่ม ID เฉพาะลงในไฟล์ XML ต้นฉบับได้หรือไม่ หรือหลังจากสร้างโมเดลต้นไม้แล้ว คุณสามารถเดินไปและตั้งค่า ID เฉพาะในแต่ละโหนดได้หรือไม่ - person Mark; 29.05.2011
comment
ฉันได้เพิ่ม ID เฉพาะลงในไฟล์ xml ต้นฉบับแล้ว คุณหมายถึงเพิ่มผู้ฟังโมเดลให้กับโมเดลทรีหรือไม่? - person KJW; 29.05.2011
comment
คำถามสุดท้ายคือ เป็นไปได้ไหมที่จะแปลงโมเดลต้นไม้เป็นไฟล์ xml - person KJW; 29.05.2011

เส้นทางระบุโหนดโดยไม่ซ้ำกัน ดังนั้น getPathForLocation จะให้เส้นทางแก่คุณ แต่นั่นคือวัตถุ TreePath ดังนั้นหากคุณต้องมีจำนวนเต็มแสดงถึง ID คุณจะต้องเขียนวิธีการที่แปล TreePaths เป็นจำนวนเต็ม

person trutheality    schedule 28.05.2011
comment
คุณหมายถึงใช้เส้นทางแบบต้นไม้และสร้าง ID เฉพาะจากสิ่งนั้นใช่ไหม - person KJW; 29.05.2011
comment
ใช่ หากคุณต้องการ ID จำนวนเต็มจริงๆ แต่เนื่องจากคุณสามารถเข้าถึงองค์ประกอบของแผนผังได้โดยตรงด้วย TreePath.getLastPathComponent() คุณอาจไม่จำเป็นต้องใช้ ID ขึ้นอยู่กับสิ่งที่คุณต้องการทำกับโหนด - person trutheality; 29.05.2011
comment
ฉันใช้ findComponentAt(x,y) เพื่อค้นหาส่วนประกอบ....ID ที่ไม่ซ้ำกันคืออะไร คุณหมายถึงคุณสมบัติ flags ของส่วนประกอบโหนด jtree หรือไม่? - person KJW; 29.05.2011
comment
ไม่รับประกันว่าแฮชโค้ดจะไม่ซ้ำกัน เพียงแต่ได้รับการออกแบบมาให้ไม่น่าจะเหมือนกันสำหรับออบเจ็กต์ที่แตกต่างกัน วิธีแก้ปัญหาที่ปลอดภัยคือเข้าไปที่แผนผังและกำหนดหมายเลขให้กับแต่ละองค์ประกอบ (ไม่ว่าจะโดยการแก้ไขส่วนประกอบหรือโดยใช้โครงสร้างข้อมูลตัวช่วยบางอย่างเช่นแผนที่) - person trutheality; 29.05.2011