เหตุใดจึงยากที่จะทำให้โปรแกรม Java 'ปรากฏเป็นภาษาพื้นเมือง'


98

แอปพลิเคชัน Java ส่วนใหญ่จะไม่เหมือนกับแอปพลิเคชัน C / C ++ Swing อาจได้รับการออกแบบโดยมีจุดประสงค์เพื่อให้ได้รูปลักษณ์ที่แตกต่าง แต่จากสิ่งที่ฉันได้อ่าน SWT นั้นพยายามที่จะ 'look native' และไม่ประสบความสำเร็จ

คำถามของฉันคือ:

ทำไมมันจึงเป็นเรื่องยากสำหรับนักพัฒนาของภาษา Java ในการออกแบบระบบ GUI ที่สำเนาว่ารูปลักษณ์ของ GUIs พื้นเมือง? GUIs ดั้งเดิมต่างกันอย่างไร มันไม่ใช่แค่เรื่องของการออกแบบปุ่มที่ดูเหมือนปุ่ม 'ดั้งเดิม' ใช่ไหม หรือลึกไปกว่านั้น?


31
เพราะ swing เขียนส่วนประกอบ gui ของตัวเองที่พยายามเลียนแบบ native แทนที่จะสร้างการเชื่อมโยงกับส่วนประกอบดั้งเดิมที่แท้จริงในแนวคิดเรื่องการพกพา
ratchet freak

5
ฉันไม่ใช่ผู้เชี่ยวชาญในหัวข้อนี้ แต่ฉันคิดว่ามันเป็นเพียงแค่เรื่องของความพยายามของผู้ขายชุดเครื่องมือ GUI ที่ยินดีลงทุนเพื่อให้ได้รายละเอียดที่เต็มไปด้วยเลือด ดูตัวอย่างเช่น C ++ framwork "Qt" และคำถาม SO นี้: stackoverflow.com/questions/7298441/…
Doc Brown

4
มีรายละเอียดมากมายให้ดูแล ตัวอย่างเช่นวิธีการเติมข้อมูลอัตโนมัติให้ทำงานในกล่องโต้ตอบการเปิดไฟล์คือจุดหนึ่งที่แอปพลิเคชันจาวาที่ใช้ภาษาพื้นเมืองดูพัง
CodesInChaos

4
Swing มีรูปลักษณ์และความรู้สึก "native lookalike" ที่คุณสามารถเสียบแทนค่าเริ่มต้น นอกจากนี้ Java พยายามใช้สิ่งที่มีอยู่ในระบบเป็นครั้งแรกด้วย AWT แต่มันใช้งานไม่ได้ดี AFAIK เนื่องจากความแตกต่างโดยธรรมชาติระหว่างแพลตฟอร์ม นั่นเป็นเหตุผลที่พวกเขาสร้าง Swing เพื่อให้แอป Java ทำงานเหมือนกันทุกที่
marczellm

5
อย่ามองข้าม JavaFX มันเป็นการแทนที่ SWING และอยู่ใน JDK / JRE โดยค่าเริ่มต้นเริ่มต้นด้วย Java 8 มันทันสมัยกว่า SWING และ AWT มากและดูพื้นเมืองมากขึ้นในทุกแพลตฟอร์ม (มันเชื่อมโยงกับชุดเครื่องมือ UI ดั้งเดิมในแต่ละอัน แพลตฟอร์ม) ด้วยวิธีที่กล่าวไว้ดังที่คนอื่น ๆ ได้กล่าวเอาไว้เพื่อให้ได้แอปพลิเคชันที่ดูเป็นธรรมชาติจากภาษา "หนึ่งขนาดเหมาะกับทุกคน" อย่าง Java คุณจะต้องทำงานบางอย่าง UI ของ Java ถูก / ถูก / ยัง - ตั้งใจที่จะเป็น "เหมาะสมที่สุดสำหรับทุกแพลตฟอร์ม" out-of-the-box
SnakeDoc

คำตอบ:


56

มันไม่ใช่แค่เรื่องของการออกแบบปุ่มที่ดูเหมือนปุ่ม 'ดั้งเดิม' ใช่ไหม

ปุ่มสำหรับเรียงลำดับ แต่มันอาจจะยากกว่าที่คุณคิด ทุกวันนี้กราฟิกที่ใช้แสดงองค์ประกอบของ GUI นั้นไม่ง่ายเหมือนกับบิตแมปแบบสุ่มที่ยืดออก (เนื่องจากมันไม่ได้ปรับขนาดได้ดีนัก) - พวกมันมักจะเป็นกราฟิกแบบเวกเตอร์ที่มีมุมจำนวนมากตั้งโปรแกรมไว้ ดังนั้นเมื่อปุ่มไปถึงขอบของหน้าจอมันอาจดูแตกต่างออกไปเล็กน้อยเช่นกัน) และแน่นอนว่าคุณจะต้องใช้กราฟิกที่แตกต่างกันเมื่อคลิกปุ่ม ด้วยเหตุผลทางลิขสิทธิ์นักพัฒนามักไม่สามารถใช้กราฟิกที่มีอยู่เหล่านี้ได้ดังนั้นพวกเขาจึงต้องสร้างใหม่ - และในขณะที่พวกเขาทำงานได้ดีส่วนใหญ่หลีกเลี่ยงไม่ได้ที่จะพลาดบางสิ่งบางอย่างเนื่องจากส่วนประกอบกราฟิกขนาดใหญ่

ฉันกำลังพูดถึงทั้งหมดที่อยู่บนพื้นฐานของ Swing ซึ่งแน่นอนว่าเป็นชุดเครื่องมือ GUI ที่มีน้ำหนักเบาและไม่ใช่เจ้าของภาษา คุณพูดถึง SWT โดยเฉพาะไม่ได้ดูเป็นเจ้าของภาษาซึ่งค่อนข้างแปลกเพราะ SWT เป็นเจ้าของภาษา มันเป็นชุดเครื่องมือที่ใช้ JNI ด้านล่างเพื่อเรียกส่วนประกอบดั้งเดิม - ดังนั้นถ้าบางสิ่งไม่ถูกต้องก็ไม่ได้เป็นเพราะรูปลักษณ์และความรู้สึก


1
ขอบคุณ 'น้ำหนักเบา' หมายถึงอะไรกันแน่? จริง ๆ แล้ว 'พื้นเมือง' หมายถึงอะไร? ฉันถือว่ามันหมายถึงสิ่งที่ใช้ทรัพยากรจากระบบปฏิบัติการของคอมพิวเตอร์หรือโต้ตอบกับมันโดยตรง มันเป็นเรื่องจริงเหรอ?
user3150201

1
@ user3150201 แน่นอนดังนั้นระบบปฏิบัติการพื้นฐานจะมีจำนวนปุ่มและวิดเจ็ตที่สามารถวางได้ตามปกติ แต่เห็นได้ชัดว่าปุ่มเหล่านี้จะแตกต่างกันไปตามระบบปฏิบัติการและระหว่างแพลตฟอร์ม ส่วนประกอบที่มีน้ำหนักเบาไม่ได้เป็นส่วนประกอบที่บอกโดยระบบปฏิบัติการพวกเขาถูกดึงดูดโดย Java (ในกรณีนี้) เพื่อดูและทำตัวเหมือนองค์ประกอบ GUI - เพื่อให้สามารถดูได้ตามที่คุณต้องการหากคุณทำงานใน (แต่คุณต้องเลียนแบบ รูปลักษณ์และความรู้สึกแพลตฟอร์มถ้าคุณต้องการที่คุณไม่ได้รับมันฟรี).
berry120

14
ตำแหน่งของปุ่มขนาดที่แน่นอนและสไตล์ GUI ที่ต้องการนั้นแตกต่างกันไปตามแพลตฟอร์มและการใช้ Java เพื่อเลียนแบบการทำงาน การสวิงสามารถให้ปุ่มเนทีฟแก่คุณได้ แต่ถ้าสูงถึง 10 พิกเซลผู้ใช้จะยังคงคิดว่ามีบางอย่างปิดอยู่ Apple มีแนวทางอินเทอร์เฟซสำหรับมนุษย์และ Microsoft มีแนวทางอินเทอร์เฟซสำหรับผู้ใช้เพื่อช่วยให้คุณได้รูปลักษณ์ที่ถูกต้อง คุณจะต้องเปลี่ยน UI บ้างระหว่างแพลตฟอร์ม
Michael Shopsin ใน

4
JavaFX ปรากฏว่าเป็น "ดั้งเดิม" มากกว่า SWING และ AWT มันมีหน้าต่างโปร่งใสพื้นเมือง ฯลฯ ทันสมัยกว่ามองออกจากกล่อง
SnakeDoc

2
@SnakeDoc มันดูทันสมัยกว่านี้แน่นอน แต่ฉันจะไม่บอกว่ามันดูเหมือน "native" - ​​แน่นอนว่ามันไม่ได้ใช้ส่วนประกอบ GUI พื้นฐานของแพลตฟอร์ม แต่ทุกอย่างจะถูกใช้ใน CSS
berry120

71

มีชุดเครื่องมือครึ่งโหลอย่างแท้จริงซึ่งอาจถือได้ว่าเป็น "ดั้งเดิม" ในบางระบบ บางส่วนของแนวหินเหล่านี้มีแนวคิดหรือความสามารถที่ไม่เหมือนใครและการจำลองแบบในชุดเครื่องมือข้ามแพลตฟอร์มนั้นน่าเบื่อ รูปลักษณ์และความรู้สึกของแอปพลิเคชั่นไม่เพียง แต่ถูกกำหนดโดย "สกิน" เท่านั้น แต่ยังรวมถึงเค้าโครงและลักษณะการทำงาน ข้อควรพิจารณาบางประการ:

  • ในกล่องโต้ตอบปุ่ม“ ตกลง” อยู่ด้านใด - ด้านซ้ายหรือด้านขวา ยุติธรรมแล้วเรามาสร้างกล่องโต้ตอบแยกกันสำหรับแต่ละระบบ
  • เราจะทำเครื่องหมายปุ่มเริ่มต้นบนหน้าจอได้อย่างไร? การย้อมสีสีตัวอักษรหนาขยายปุ่ม? ยุติธรรมพอเรามาใส่ลงในสไตล์ชีท
  • บน Windows แนวคิด“ Ribbon” นั้นค่อนข้างเนทีฟ สิ่งนี้จะถูกแปลเป็น Mac โดยที่ Ribbon ไม่ใช่เรื่องธรรมดาได้อย่างไร ก็พอแล้วเราจะลืมเลย์เอาต์ของพิกเซลที่แน่นอนและจัดเตรียมแถบเครื่องมือที่แตกต่างกันสำหรับแต่ละระบบ
  • แถบเมนูเป็นส่วนหนึ่งของหน้าต่าง (Windows, KDE แบบเป็นทางเลือก) หรืออยู่ด้านบนของหน้าจอ (Mac, Unity) หรือไม่ ก็พอแล้วเรามาเขียนการใช้งานที่แตกต่างกันสำหรับแต่ละระบบเนื่องจากเราได้โยนเลย์เอาต์ที่แน่นอนของพิกเซลออกไป
  • แบบอักษรมีการแสดงผลอย่างไร เป็นกรอบที่เป็นไปได้หรือราบรื่นและลดรอยหยัก? และควรใช้แบบอักษรใด โปรดทราบว่าแบบอักษรที่แตกต่างกันมีตัวชี้วัดที่แตกต่างกันดังนั้นย่อหน้าเดียวกันที่แสดงความกว้างเดียวกันอาจมีจำนวนบรรทัดที่แตกต่างกันขึ้นอยู่กับแบบอักษร
  • พื้นหลังของหน้าต่างเป็นสีเดียวภาพหรือไล่ระดับสีหรือไม่? ลองใส่ลงในสไตล์ชีทเช่นกัน
  • แถบเลื่อนมีลักษณะอย่างไร ปุ่มเหล่านี้อยู่ที่ไหน - ถ้ามี มีความกว้างเพียงใดหรือมีการเปิดเผยเมื่อตัวชี้เลื่อนไปยังพื้นที่หนึ่งเท่านั้น
  • เราจะรวมโทนสีอื่น ๆ ได้อย่างไร
  • สิ่งที่คาดว่าจะลากไปมาได้? เมนูบริบทคาดหวังที่ไหน

ปัญหาเหล่านี้ไม่สามารถแก้ไขได้ผ่านสไตล์ชีทที่เรียบง่ายเมื่อพวกเขาสัมผัสกับพฤติกรรมหรือเค้าโครงทั่วไปของแอปพลิเคชัน ทางออกที่แท้จริงเพียงอย่างเดียวคือการเขียนแอปพลิเคชันใหม่สำหรับแต่ละระบบ (ดังนั้นจึงไม่สนใจสิทธิประโยชน์ข้ามแพลตฟอร์มของ Java) วิธีแก้ปัญหาที่เหมือนจริงเพียงอย่างเดียวคือการลืมเลย์เอาต์ของพิกเซลที่แน่นอนและเพื่อเขียนไปยังอินเทอร์เฟซทั่วไปซึ่งสรุปไปตามชุดเครื่องมือเฉพาะระบบ โซลูชันของ Swing คือเลียนแบบระบบต่าง ๆ ซึ่งล้มเหลวอย่างน่าทึ่ง

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


1
+1 มีเพียงสิ่งเดียวที่ฉันต้องการเพิ่ม: สิ่งที่เกี่ยวกับสิ่งที่ระบบอนุญาตให้ผู้ใช้กำหนดค่าเริ่มต้นจากรายละเอียด "ง่าย" เช่นวิธีการเปิดเมนูบริบท (และฉันต้องการโปรแกรม windows ที่มีริบบ้อนและแอพ Mac เป็นพิเศษขอบคุณใช่ GUI ที่ดีต้องได้รับการออกแบบสำหรับระบบปฏิบัติการ)
Christopher Creutzig

@ChristopherCreutzig นั่นคือสิ่งที่ประสบการณ์ของฉันมาจาก: บนเดสก์ท็อปหลักของฉันฉันใช้ KDE บน Linux (ซึ่งทั้งคู่สามารถกำหนดค่าได้เอง) และใช้ QtCurve เพื่อปรับรูปลักษณ์ของแอปพลิเคชัน สไตล์พิเศษเหล่านี้ใช้งานได้ดีในแอปพลิเคชัน KDE ระดับสูง แอป GTK ที่เขียนมาอย่างดีสามารถใช้เลเยอร์ความเข้ากันได้ แต่การไล่ระดับพื้นหลังหายไปแถบเมนูจะอยู่ภายในหน้าต่างเป็นต้น แต่จากนั้นมันก็เริ่มเสื่อมสภาพอย่างรวดเร็วโดยโปรแกรมที่ใช้วิดเจ็ตบางอย่างจากสไตล์ระบบ (เช่นแถบเลื่อน) แต่ไม่สนใจคนอื่น ๆ (เช่นการแสดงผลตัวอักษรหรือเงารอบเมนู)
อมร

+1 เนื่องจากมีจุดแข็งในคำตอบนี้ แต่ก็มีจุดอ่อนเช่นกัน ปัญหา "ตัวจัดการหน้าต่างนี้วาด X" ใด ๆ จะได้รับการจัดการโดยใช้ API ดั้งเดิม ตัวอย่างเช่น X11 บน OS X สามารถวาดหน้าต่าง OS X ดั้งเดิม, ปุ่ม, แถบเลื่อน, กล่องโต้ตอบ ฯลฯ ดังนั้นปัญหาเหล่านั้นจึงหายไป จริงคำตอบคือสิ่งที่ @TheSpooniest กล่าวว่าด้านล่าง: UX เป็นมากขึ้นกว่าเพียงแค่การวาดวิดเจ็ต การเว้นวรรค, ระยะเวลา, ภาพเคลื่อนไหว, การเร่งความเร็วของเมาส์, อินพุตสัมผัส ... มีโลกของรายละเอียดที่ละเอียดอ่อนซึ่งมีราคาแพงมากในการทำซ้ำด้วยชุดเครื่องมือข้ามแพลตฟอร์ม
Mark E. Haase

13

ใช่มันลึกลงไป

การสร้างปุ่มซึ่งดูเหมือนว่าปุ่ม Windows หรือ OS X นั้นง่ายเมื่อคุณสร้างปุ่มนี้เท่านั้น แต่ปุ่มต้อง "ประพฤติ" เหมือนต้นฉบับซึ่งอาจไม่ใช่เรื่องง่าย: อาจมีที่ว่างมากกว่าในรุ่นหนึ่งที่มี แต่ไม่ใช่ในรุ่นอื่นอาจเป็นสีที่เหมาะกับการออกแบบของคุณในเวอร์ชั่น Windows และอื่น ๆ

สิ่งนี้จะถูกตัดออกเมื่อคุณมี GUI ทั้งหมด: โปรแกรม OS X นำเสนอเนื้อหาที่แตกต่างจากโปรแกรม Windows ถัดไปเป็นไปไม่ได้ที่จะจับภาพใน GUI เดียว - คุณต้องใช้สอง GUI แต่แอปพลิเคชั่นไม่มากที่ทำให้ยุ่งยากมาก แต่พวกเขาตั้งเป้าหมายที่จะ "ดูโอเคกับระบบส่วนใหญ่" - มันยังคงดูแปลกไป แต่ใช้งานได้ง่ายและพัฒนาได้ง่ายกว่ามาก


9

การสร้างปุ่มที่ดูเหมือนปุ่ม OSX หรือปุ่ม Windows นั้นไม่ใช่เรื่องยาก แต่แนวทาง UI สำหรับสภาพแวดล้อมส่วนใหญ่นั้นไม่ง่ายเหมือนพื้นฐานของ "นี่คือสิ่งที่ปุ่มดูเหมือน" มีความแตกต่างของ subtler มากมายตั้งแต่ระยะห่างระหว่างองค์ประกอบ UI จนถึงลำดับที่การกระทำที่รู้จักกันดีควรปรากฏในรายการไปยังตำแหน่งที่แน่นอนของไดอะล็อกกำหนดค่า / ตัวเลือกในระบบเมนู หนึ่งสามารถทำให้กรณีที่พบบ่อยที่สุดโดยอัตโนมัติสำหรับส่วนติดต่อผู้ใช้ที่ง่ายมาก แต่งาน UI ส่วนใหญ่ถ้าไม่ต้องการการสัมผัสที่ละเอียดกว่า

SWT พยายามทำให้เรื่องนี้เป็นแบบอัตโนมัติและอีกครั้งมันเหมาะสำหรับงาน UI อย่างง่าย แต่ไม่มีวิธีที่เหมาะกับทุกขนาดดังนั้นเมื่อ UIs มีความซับซ้อนมากขึ้นวิธีการพื้นฐานที่ใช้จะเริ่มกระจุย โดยทั่วไปแล้วมันเป็นไปได้ที่จะนำมันกลับมาให้สอดคล้องกับการทำงาน UI ด้วยตนเองที่อุตสาหะ แต่นี่ไม่ใช่สิ่งที่โปรแกรมเมอร์ส่วนใหญ่สามารถหรือยินดีที่จะทำสำหรับแพลตฟอร์มทั้งหมด

แนวทางของ Swing คือการหลีกเลี่ยงชุดเครื่องมือพื้นเมืองเมื่อทำได้ ไม่ใช่คนพื้นเมืองและไม่พยายาม: แต่พยายามสร้างบางสิ่งที่จะดูเหมือน (เกือบ) เหมือนกันไม่ว่าจะทำงานที่ไหน แทนที่จะพยายามทุกวิถีทางเพื่อทำให้ทุกคนพอใจ แต่ก็พยายามทำให้พอใจด้วยตัวเองและในขณะที่มันประสบความสำเร็จเท่าที่จะทำได้ใคร ๆ ก็สามารถตั้งคำถามว่าผลที่ได้คือชุมชนผู้ใช้ที่กว้างขึ้น


7

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

ยิ่งกว่านั้นแม้ว่าคุณจะเลือกด้าน "ดูเป็นธรรมชาติ" คุณอาจต้องการปกป้องผู้ใช้ชุดเครื่องมือกราฟิกของคุณจาก "การปรับปรุง" ในส่วนประกอบพื้นฐานและ API ซึ่งอาจทำให้แอปพลิเคชันของพวกเขาหยุดทำงานโดยไม่คาดคิด

นี่คือเหตุผลที่นักพัฒนาชุดเครื่องมือ GUI บางคนต้องการให้ส่วนประกอบของตัวเองที่เลียนแบบดั้งเดิม แต่ให้การใช้งานของพวกเขาเอง ในอีกทางหนึ่งการพัฒนาชุดเครื่องมือ GUI ที่ใช้งานได้อย่างสมบูรณ์คือความพยายามที่สำคัญและการพิจารณาทางเศรษฐกิจอาจนำไปสู่การตัดขอบเล็กน้อย

โปรดทราบว่าปัญหานี้ไม่ได้เกิดเฉพาะกับจาวา แต่ทุก บริษัท ที่ผลิตชุดเครื่องมือเป็นอิสระต้องเผชิญกับปัญหา


แทนที่จะเป็นการลดทอนลงอย่างเงียบ ๆ คุณจะได้รับบริการที่ดีขึ้นต่อชุมชนโดยการอธิบายสิ่งที่คุณรู้สึกว่าผิดด้วยคำตอบ เว้นเสียแต่ว่ามันจะเป็นปัญหาส่วนตัว ...
Nicola Musatti

4

มันเป็นเพราะประวัติศาสตร์

Sun ประสงค์ให้ซอฟต์แวร์ Java ทั้งหมดทำงานเหมือนกันในทุกเครื่อง

สำหรับซอฟต์แวร์ที่จะ“ ปรากฏแบบดั้งเดิม” จะต้องทำงานเหมือนกับซอฟต์แวร์อื่น ๆ ในระบบปฏิบัติการที่กำหนด

Sun ได้ทำทุกอย่างเพื่อให้สามารถเขียนซอฟต์แวร์ Java ที่รวมเข้ากับระบบปฏิบัติการได้ยากเนื่องจากการรวมใด ๆ กับระบบปฏิบัติการจะทำให้ซอฟต์แวร์ทำงานแตกต่างกันในแต่ละระบบปฏิบัติการ

ทุกวันนี้โปรแกรมเมอร์ Java น้อยคนสนใจสิ่งอื่นนอกจากซอฟต์แวร์บนเว็บเซิร์ฟเวอร์

Sun ฆ่า Java บนเดสก์ท็อปด้วยการเขียนโปรแกรมทั้งหมดที่ใช้ Microsoft java based based ดังนั้นจึงทำให้โปรแกรมเมอร์ที่เลือก Java ในยุคแรก ๆ ดูแย่

ทุกคนที่เขียนซอฟต์แวร์เดสก์ท็อปที่สนใจ“ เรียนรู้ภาษาพื้นเมือง” เรียนรู้เมื่อนานมาแล้วว่าไม่ต้องใช้จาวาและมีความคิดเห็นเพิ่มขึ้นทุกครั้งที่ใช้ซอฟต์แวร์ Oracle

ดังนั้นทุกวันนี้จึงไม่มีความต้องการที่จะ“ ปรากฏตัวดั้งเดิม” บนซอฟต์แวร์เดสก์ท็อปจากโปรแกรมเมอร์ Java


5
"ซุนทำทุกอย่างตามอำนาจเพื่อให้ยากที่จะเขียนซอฟต์แวร์จาวาที่รวมเข้ากับระบบปฏิบัติการ" ผิด พวกเขาไม่ได้ใช้ความพยายามอย่างมากในการทำให้เป็นเรื่องง่าย "Sun ฆ่า Java บนเดสก์ท็อปโดยการเขียนโปรแกรมทั้งหมดที่ใช้ Microsoft java based systems" ผิดความเป็นศัตรูร่วมกันระหว่าง Microsoft และ Sun ทำให้ Microsoft สร้าง Microsoft AWT รุ่นที่ไม่สอดคล้องกับข้อกำหนดของ Sun คดี Sun / MS
jwenting

1
@ jwenting, Sun สนใจเพิ่มเติมเกี่ยวกับการสร้างปัญหาให้กับ Microsoft แล้วเกี่ยวกับโปรแกรมเมอร์ที่เลือกใช้ระบบ java ของ Microsoft ดังนั้นฉันจึงยอมแพ้กับ Jave และคอยอยู่กับ MFC จนกว่า C # จะออกมา
เอียน

3
อาจมีบางคนที่ Sun แต่ความเชื่อมั่นนั้นเป็นสิ่งที่เกิดร่วมกัน หากคุณพัฒนาโดยเฉพาะสำหรับแพลตฟอร์มเดียวเครื่องมือดั้งเดิมสำหรับแพลตฟอร์มนั้นเป็นตัวเลือกที่ต้องการอยู่ตลอดเวลาสิ่งนี้ไม่เกี่ยวข้องกับการเมืองขององค์กร หากคุณเลือกเครื่องมือของคุณตาม "ฉันเกลียดชังซัน" หรือ "ฉันเกลียดชังไมโครซอฟท์" ซึ่งสะท้อนถึงทัศนคติในการทำงานของคุณที่แย่มาก ฉันใช้ Java เป็นส่วนใหญ่ แต่ข้างๆฉันก็ใช้ Delphi, C #, Ruby, C ++, C, Progress ไม่ว่าอะไรจะดีที่สุดสำหรับงานในมือ และบ่อยกว่านั้นจะกลายเป็นโซลูชั่นไฮบริด
jwenting

3

สิ่งที่คุณคิดว่าnativeจริง ๆ แล้วเป็นแอพที่ใช้งานได้จริงในขณะที่ชุดเครื่องมือเช่น SWT ปฏิบัติตามมาตรฐานที่เผยแพร่สำหรับ UI ของระบบปฏิบัติการนั้น ปัญหาคือไม่มีใครสร้างแอพตามมาตรฐานเหล่านั้นดังนั้นเมื่อคุณเปิดใช้งานแอป Java ดูเหมือนว่าจะไม่ใช่เจ้าของภาษา ตัวอย่างเช่นโครงการเกือบทั้งหมดของ Microsoft (Office, Outlook และอื่น ๆ ) ไม่สามารถทำซ้ำได้โดยใช้การควบคุมมาตรฐานของ Windows

จะยิ่งแย่ลงเนื่องจาก Microsoft และ Apple เพิ่มฟีเจอร์ UI แบบไดนามิกให้กับแพลตฟอร์มระบบปฏิบัติการของพวกเขา การอนุญาตให้นักพัฒนาสกิน / สไตล์แอพของพวกเขาคล้ายกับที่การออกแบบเว็บสร้างสไตล์สำหรับเว็บไซต์

Java บนแพลตฟอร์ม Android กำลังติดตามเส้นทางนี้ การกำหนดองค์ประกอบ UI สำหรับ Android ที่กำหนดใน XML ด้วยสไตล์ที่ปรับเปลี่ยนได้

Java ไม่เคยได้รับความนิยมมากในฐานะแพลตฟอร์มเดสก์ท็อป เป็นผลให้การเปลี่ยนแปลงเหล่านี้ในอุตสาหกรรมไม่แพร่กระจายไปยังรันไทม์ของเดสก์ท็อป มีนักพัฒนาไม่เพียงพอที่จะใช้เวลาในการแก้ไขปัญหา


1
+1 ย้อนกลับไปในยุค Windows 95 มีการมองหา 'มาตรฐาน' สำหรับตัวควบคุม Windows ตอนนี้ไม่มาก
GrandmasterB

ใช่เป็นเวลาไม่กี่ปีที่ผ่านมาตั้งแต่ฉันได้ตั้งโปรแกรมเดสก์ท็อป แต่ฉันรู้สึกประหลาดใจที่. NET ไม่ได้จัดส่งด้วยการควบคุมรูปแบบริบบิ้น
Rig

@Rig ตั้งแต่ NET 4.0 มีการควบคุม Ribbon ดั้งเดิมที่ดีใน. NET นี่เป็นบทความที่ดี: c-sharpcorner.com/UploadFile/0b73e1/ribbon-control-in-wpf-4-5
Christian Sauer

1
@Rig คุณจะต้องใช้. NET 4.5 ไม่ใช่. NET 4. Visual Studio 2010 สามารถกำหนดเป้าหมายได้สูงสุด 4 เท่านั้น คุณจะต้องมี VS2012 หรือใหม่กว่าเพื่อกำหนดเป้าหมาย 4.5 ฉันสามารถดูได้เมื่อกำหนดเป้าหมาย 4.5 ใน VS2013 แต่ไม่ใช่เมื่อฉันเปลี่ยนเวอร์ชันเป้าหมายเป็น 4
Bob

1
@Rig เป็นไปได้ที่จะใช้ Ribbon ใน Net 4.0 - คุณสามารถดาวน์โหลดได้จาก Microsoft แล้วมันจะปรากฏขึ้น: 10rem.net/blog/2010/10/22/wpf-ribbon-october-release (ไม่แน่ใจว่าสิ่งนี้หรือไม่ เป็นรุ่นล่าสุด) ดาวน์โหลดได้ดีกว่าจาก Nuget ฉันต้องทำเช่นนั้นสำหรับโปรแกรมที่ต้องทำงานบน Windows XP - ทำงานได้ดีและส่วนใหญ่เข้ากันได้กับตัวแปร Net 4.5 ดังนั้นคุณสามารถคัดลอกสิ่งที่ 4.0 เมื่อ XP เกษียณในที่สุด
คริสเตียนซาวเออร์

-1

ซึ่งคุณระบบปฏิบัติการต้องการที่จะดู "แม่" เกินไป?

คุณไม่สามารถเป็นเจ้าของได้ทั้งหมด 100% ตลอดเวลา

SWT ฯลฯ เป็นวิธีที่ดีที่สุดความพยายามที่จะมองเป็นพื้นเมืองทั้งหมดของพวกเขาที่จะได้รับเมื่อคุณต้องการที่จะไปถึงบางประนีประนอม

และในความเป็นจริงการประนีประนอมครั้งนี้เริ่มที่จะเข้าถึงได้ยากขึ้นเรื่อย ๆ ไม่มากเพราะระบบปฏิบัติการ แต่เป็นเพราะอุปกรณ์อินพุต สำหรับหน้าจอสัมผัสคุณต้องออกแบบให้แตกต่างกันเพราะไม่มีปุ่มเมาส์ขวา ดังนั้นคุณต้องรองรับฟังก์ชั่นเดียวกันเป็นอย่างอื่น

จะไม่มีปุ่มวิเศษที่จะย้ายการทำงาน "สังหรณ์ใจ" จากปุ่มเมาส์ขวาเพื่อ guestures โดยไม่ต้องคุณ specifiying ทุกแง่มุมโดยละเอียดสำหรับอุปกรณ์ทุกท่านเดียว (จุดที่คุณมีถิ่นกำเนิดในแพลตฟอร์มที่คุณได้มีการพิจารณาทุกครั้ง แต่คงไม่ใช่ - ต้องการสิ่งใดก็ตามที่คุณไม่ได้พิจารณา)


-2

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

ฉันคิดว่าคำตอบนั้นค่อนข้างง่ายและคำตอบจำนวนมากไม่ได้เจาะลึกลงไปในเรื่องนี้

หากภาษาของคุณอนุญาตให้วาด piexel บนหน้าจอมันเป็นไปได้ 100% ในการสร้างกรอบงาน gui ซึ่งจะเลียนแบบการควบคุมรูปแบบ Windows ที่มีลักษณะและความรู้สึกที่แม่นยำ

เนื่องจาก Java เป็นแพลตฟอร์มข้ามแพลตฟอร์มจึงมีความเป็นไปได้ทั้งหมดที่จะตรวจสอบให้แน่ใจว่า UI ประเภท Mac ที่ใช้ระบบปฏิบัติการจริง (Mac / Windows) จะเลือกที่จะดูแตกต่างกันในทั้งสองแพลตฟอร์ม

อย่างที่คุณเห็นใน XAML เช่น UI สามารถนำเสนอได้ง่ายในรูปแบบและภาษาที่มีโครงสร้างมาก การเลือกพฤติกรรม "ดั้งเดิม" ก็เป็นไปได้เช่นกันหากใช้เวลาในการทำเช่นนี้

ดังนั้นจึงเป็นไปได้ที่จะสร้างกรอบงาน GUI ซึ่งจะช่วยให้นักพัฒนา Java สามารถรับแอพพลิเคชั่นซึ่งจะดูเป็นธรรมชาติบน Mac และ Windows

ดังนั้นเราจึงไปที่ Swing นั่นเป็นเพียงหนึ่งในกรอบงาน GUI ที่ไม่มีที่สิ้นสุดที่เป็นไปได้ของกรอบงาน GUI ที่สามารถสร้างขึ้นสำหรับ Java มันทำหน้าที่เป็นวิธีการตั้งโปรแกรมซึ่งไม่ได้ทำตามขั้นตอนข้างต้นและคุณได้รับแอพแปลก ๆ ในทั้งสองระบบ ตัวเลือกที่สร้างโดยนักพัฒนา Swing ไม่มีใครบังคับให้พวกเขาทำเช่นนี้และทำตัวแบบนั้น


2
สิ่งนี้ไม่ตอบคำถามผู้ถามได้กล่าวถึงประเด็นนี้แล้ว: "Swing อาจได้รับการออกแบบโดยมีจุดประสงค์เพื่อให้มีรูปลักษณ์ที่โดดเด่น"
gnat

ฉันไม่เห็นด้วย แต่ขอขอบคุณที่แสดงความคิดเห็นลบ (?)
Valentin Kuzub
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.