Salut tout le monde !
Je développe actuellement un gestionnaire de séries télévisées (pour suivre son avancement dans plusieurs séries, connaître les dates de sorties, etc...).

Mon interface ressemble à ça :


Le tout repose sur un GridBagLayout :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package gUI
 
import javax.swing.*
import java.awt.GridBagLayout
import groovy.swing.*
import ca.odell.glazedlists.*;
import ca.odell.glazedlists.swing.*;
import outils.*;
 
 
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
 
EventList testListe = new BasicEventList();
 
 
 
testListe.addAll(BDD.versCollection("select * from series where suivi"))
EventListModel testModel = new EventListModel(testListe);
JList testJList = new JList(testModel);
 
String testStr = "Salut";
/*
double t1=System.currentTimeMillis();
double Delta = 100;
while(System.currentTimeMillis()<t1+Delta); 
*/
 
// définition de la fenêtre à propos
def aPropos = new SwingBuilder().dialog(title: 'A propos', defaultCloseOperation: JFrame.HIDE_ON_CLOSE,
        size: [300, 200], show: false, resizable: false, locationRelativeTo: null) {
    gridBagLayout()
    label(text:'salut')
}
 
 
// définition fenêtre principale
def framePrincipale = new SwingBuilder().frame(title: 'Gestionnaire de séries', defaultCloseOperation: JFrame.EXIT_ON_CLOSE,
					size: [800, 600], show: true, locationRelativeTo: null) {
	menuBar() {
		menu(text: "Fichier", mnemonic: 'F') {
			menuItem(text: "Quitter", mnemonic: 'X', actionPerformed: { System.exit(0) })
		}
		menu(text:"Données", mnemonic: 'D'){
			menuItem(text:"Importer son avancement", mnemonic: 'I')
			menuItem(text:"Exporter sous forme de fichier", mnemonic: 'E')
		}
		menu(text:"Aide", mnemonic: 'A'){
			menuItem(text:"Aide...", mnemonic: 'H')
			menuItem(text:"A propos", mnemonic: 'B', actionPerformed:{aPropos.show()})
		}
	}
	gridBagLayout() // défini le layout choisi
 
/*Notion de contraintes pour les composants ajoutés au grid bag layout :
 * (source des exemples : http://www.java2s.com/Code/Java/Swing-JFC/GridBagLayoutPane.htm)
 * constraints:gbc(
 * 		gridx gridy == coordonnées de la case
 * 		gridwidth gridheight == largeur en CASE ! 
 *      weightx weighty == poids de la case
 * 		fill == horizontal, vertical ou les deux (both)
 * 		inset == marge intérieure (entre l'objet et le bord de la fenêtre)
 * 	)
 * => constraints:gbc(gridx:,gridy:,gridwidth:,gridheight:,fill:java.awt.GridBagConstraints.BOTH,inset:[,,,])
*/
	scrollPane(constraints:gbc(
					gridx:0,
					gridy:0,
					gridwidth:1,
					gridheight:2,
					fill:java.awt.GridBagConstraints.VERTICAL,
					insets:[0,0,0,0],
					weightx:0.0,
					weighty:1.0)
					){
 	 	list(model:testModel,mouseClicked:{println it})
	}
	button(text:"+/-",constraints:gbc(
					gridx:0,
					gridy:2,
					weighty:0.0,
					weightx:0.0))
 
	scrollPane(constraints:gbc(
					gridx:1,
					gridy:0,
					gridwidth:2,
					fill:java.awt.GridBagConstraints.BOTH,
					weightx:1.0,
					insets:[0,0,0,0])
					){
			panel(){
				 gridBagLayout()
				 label(text:testStr,constraints:gbc(gridx:0,gridy:0))
				 label(text:'Salutations',constraints:gbc(gridx:1,gridy:0))
				 label(text:'',constraints:gbc(gridx:2,gridy:0))
				 label(text:'Liste séries',constraints:gbc(gridx:0,gridy:1,gridwidth:3))
 
			}
	}
 
	separator(constraints:gbc(
			gridx:0,
			gridy:3,
			gridwidth:3,
			fill:java.awt.GridBagConstraints.HORIZONTAL))
 
    label(text:'Application en construction... Attention à la peinture fraîche.',
    		constraints:gbc(
    				gridx:0,
    				gridy:4,
    				gridwidth:2,
    				weightx:0))
 
}
J'utilise les fonctionnalités des Glazed list pour le ListModel

J'ai deux problèmes :

- Quand j'effectue un mouseClicked sur un item, comment récupérer l'id de la ligne cliquée ? Là avec mon "println it" j'obtiens des lignes du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
java.awt.event.MouseEvent[MOUSE_CLICKED,(24,31),absolute(269,162),button=1,modifiers=Button1,clickCount=1] on javax.swing.JList[,0,0,48x510,alignmentX=0.0,alignmentY=0.0,border=,flags=50331944,maximumSize=,minimumSize=,preferredSize=,fixedCellHeight=-1,fixedCellWidth=-1,horizontalScrollIncrement=-1,selectionBackground=javax.swing.plaf.ColorUIResource[r=51,g=153,b=255],selectionForeground=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],visibleRowCount=8,layoutOrientation=0]
- J'aimerais bien fixer une largeur à la case du gridbaglayout qui contient la liste, mais j'ai du mal à voir comment faire.

Voilà merci pour toute aide, désolé pour mon code s'il ne constitue pas un modèle de lisibilité.
J'utilise Groovy pour me simplifier la vie, mais je n'ai rien contre une solution en Java pur car Groovy accepte le code java sans broncher.