
Originariamente inviata da
andbin
Guarda che io intendo una cosa del tipo:
codice:
<?xml version="1.0" encoding="UTF-8"?>
<jframe class="com.esempio.MyEditorFrame" title="Editor di testo"
defaultExitOperation="EXIT_ON_CLOSE" visible="true" pack="true">
<jmenubar>
<jmenu text="File">
<jmenuitem text="Apri..." accelerator="CTRL+O"/>
<jmenuitem text="Salva" accelerator="CTRL+S"/>
<separator/>
<jmenuitem text="Esci" accelerator="CTRL+Q"/>
</jmenu>
</jmenubar>
<jscrollpane hScrollBar="AS_NEEDED" vScrollBar="AS_NEEDED" constraint="Center">
<jtextarea rows="40" columns="80" lineWrap="true"/>
</jscrollpane>
<!-- una status bar con 3 label -->
<jpanel layout="GridLayout" constraint="South">
<jlabel/>
<jlabel/>
<jlabel/>
</jpanel>
</jframe>
Quello che ho strutturato è "quasi" 1:1 con ciò che realmente fa e permette Swing. Salvo abbreviazioni/semplificazioni che vanno bene se sensate, tipo solo "AS_NEEDED" invece della lunga costante HORIZONTAL_SCROLLBAR_AS_NEEDED.
E non ci vuole un "guru" di Swing per capire che si tratta di una piccola UI che rappresenta un mini text-editor, con il classico menù, una text-area scrollabile e una (abbozzata) status-bar. Chi legge questa struttura non deve perdere il tempo a guardare che "MainContainer" è una roba messa 30 righe prima ...
Per come l'ho scritta così, è semplice, leggibile e più facile che scrivere tutto il codice Java a mano. Lo sai che ad esempio solo quel semplice menù con i vari accelerator, è una
noia mortale da scrivere in codice Java con tutti i vari oggetti KeyStroke da creare per l'accelerator??
Ma ovviamente ho solo "abbozzato" le funzionalità. Ci sono tante, tante, tante altre cose da valutare, del tipo:
- come rappresenti i colori?
- e i font?
- e gli icon?
- e i cursor?
- e i margin?
- e i border?
- e le varie dimensioni: minimumSize/maximumSize/preferredSize?
- e i constraint?
Vedi che io ho messo
constraint="Center" perché il jscrollpane va per default nel content-pane di JFrame, che tecnicamente è un JPanel con un BorderLayout per default. Con BorderLayout i constraint sono facili. BorderLayout.CENTER è una costante stringa che contiene appunto "Center".
Ma se un container usa es. GridBagLayout, il constraint da usare per ciascun componente deve essere un oggetto più complesso, il
java.awt.GridBagConstraints. Come lo rappresenteresti??
E se volessi
localizzare (nel senso di rendere "internazionale", con le lingue) la UI? Dai, questa è facile, te la dico. Si può pensare ad una forma tipo
title="{{main.frame.title}}" dove main.frame.title diventa una "chiave" in un ResourceBundle per un certo Locale (lingua).
Insomma, quello che io ho fatto è rappresentare la struttura tenendo a mente tutta la complessità e le finezze di Swing, che io personalmente conosco molto bene. E' chiaro che più vai a fondo su queste finezze e funzionalità di Swing, più il codice di parsing diventa complesso (ma comunque fattibile). Ovviamente nessuno obbliga ad arrivare fino a chissà quale livello di complessità.
Quello che tu hai proposto è una cosa inguardabile, dove chi legge il file si "perde" solo tra index, name, ecc.. con il rischio solo di combinare casini se ci mette mani.