Comment fournir de la pagination de soutien à une JTable dans Swing?
J'ai créé une interface graphique en Swing Java dans lequel j'ai utilisé JTable.Maintenant, je veux afficher la page suivante les informations en utilisant la pagination. Comment dois-je faire ?
Aussi loin que je me souviens de la solution de ce problème réside dans le concept de la pagination: il suffit de récupérer les données que l'utilisateur veut les voir et rien de plus. Cela signifie aussi que vous devez parfois d'obtenir plus de données à partir du serveur de base de données (ou du serveur d'applications) si l'utilisateur fait défiler la liste.
Grande a été ma surprise qu'il n'y avait pas vraiment d'un out-of-the-box solution (même pas un copier - coller de la solution) pour ce problème. Toute personne qui sait, s'il vous plaît n'hésitez pas à étendre mon (assez limité) connaissance de la plate-forme J2EE.
Donc, nous avons creusé, et a essayé de construire une solution de nous-mêmes.
Ce que nous avons finalement venu avec était adaptée TableModel classe prend soin de la pagination.
Une autre option à mettre en œuvre est d'utiliser une barre de défilement-moins scrollpane et un couple de nav boutons pour effectuer le contrôle. Les boutons qui ont été ajoutés sont normales JButtons pour le prototype.
Un prototype rapide est ajouté au-dessous. Il fait quelques hypothèses, dont l'une est que le modèle de table, toutes ses données. Le travail pourrait être fait pour s'assurer que les lignes de la fin de la chasse d'eau en haut de l'écran lors de la navigation.
privatevoid buildFrame(){
frame =newJFrame("Demo");
frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addStuffToFrame();
frame.setVisible(true);}privatevoid addStuffToFrame(){finalJTable table = getTable();finalJScrollPane scrollPane =newJScrollPane(table);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);finalJButton next =newJButton("next");finalJButton prev =newJButton("prev");ActionListener al =newActionListener(){publicvoid actionPerformed(ActionEvent e){Rectangle rect = scrollPane.getVisibleRect();JScrollBar bar = scrollPane.getVerticalScrollBar();int blockIncr = scrollPane.getViewport().getViewRect().height;if(e.getSource()== next){
bar.setValue(bar.getValue()+ blockIncr);}elseif(e.getSource()== prev){
bar.setValue(bar.getValue()- blockIncr);}
scrollPane.scrollRectToVisible(rect);}};
next.addActionListener(al);
prev.addActionListener(al);JPanel panel =newJPanel(newBorderLayout());JPanel buttonPanel =newJPanel();
buttonPanel.add(prev);
buttonPanel.add(next);
panel.add(buttonPanel,BorderLayout.NORTH);
panel.add(scrollPane,BorderLayout.CENTER);
frame.getContentPane().add(panel);}privateJTable getTable(){String[] colNames =newString[]{"col 0","col 1","col 2","col 3"};String[][] data =newString[100][4];for(int i =0; i <100; i++){for(int j =0; j <4; j++){
data[i][j]="r:"+ i +" c:"+ j;}}returnnewJTable(data,colNames);}
Vous pouvez essayer de 2 de la requête, la première requête pour compter le nombre total des lignes de la DB et de la deuxième requête est pour le réel de données 🙂 Et pour le côté de l'INTERFACE utilisateur, vous pouvez essayer comme ceci:
J'ai écrit un Java pagination de l'outil dataj. Il utilise JQuery dataTables plug-in de la pagination de métadonnées pour construire la page de résultat.
J'ai également ajouté quelques classes clientes pour Java Swing, y compris un TableRowSorter qui appelle la (côté serveur) le tri plutôt que de les trier à l'intérieur du modèle de table.
N'hésitez pas à télécharger et à me contacter si vous avez des questions. Il est sous licence Apache 2.
La DBTable composant est intégré dans un cadre traditionnel JFrame.
Exemple de code
L'exemple de code suivant produit de la fenêtre montré dans la capture d'écran précédente:
import javax.swing.JFrame;import javax.swing.UIManager;import quick.dbtable.DBTable;publicclassQuickTableFrameextendsJFrame{privatestaticfinallong serialVersionUID =-631092023960707898L;publicQuickTableFrame(){try{//Use system look and feelUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//set Frame properties
setSize(300,200);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);//create a new quicktableDBTable dBTable1 =newDBTable();//add to frame
getContentPane().add(dBTable1);//set the database driver to be used, we are using jdbc-odbc driver
dBTable1.setDatabaseDriver("org.h2.Driver");/*
* set the jdbc url,"quicktabledemo" is the data source we have
* created for the database
*/
dBTable1.setJdbcUrl("jdbc:h2:mem:test;INIT=create table employee as select * from CSVREAD('test.csv');");//set the select statement which should be used by the table
dBTable1.setSelectSql("select * from employee");//to create the navigation bars for the table
dBTable1.createControlPanel();//connect to database & create a connection
dBTable1.connectDatabase();//fetch the data from database to fill the table
dBTable1.refresh();}catch(Exception e){
e.printStackTrace();}}publicstaticvoid main(String[] args){//create a new table frameQuickTableFrame myframe =newQuickTableFrame();}}
J'ai envisagé de les utiliser. Toutefois, la licence LGPL de QuickTable est pas compatible EPL. Voici une alternative: java-swing-tips.blogspot.fr/2008/03/...
Pagination dans un Swing JTable ressemble à un article de nice.
Voici un extrait:
OriginalL'auteur Petros
Une autre option à mettre en œuvre est d'utiliser une barre de défilement-moins scrollpane et un couple de nav boutons pour effectuer le contrôle. Les boutons qui ont été ajoutés sont normales
JButton
s pour le prototype.Un prototype rapide est ajouté au-dessous. Il fait quelques hypothèses, dont l'une est que le modèle de table, toutes ses données. Le travail pourrait être fait pour s'assurer que les lignes de la fin de la chasse d'eau en haut de l'écran lors de la navigation.
le texte d'alt http://img7.imageshack.us/img7/4205/picture4qv.png
OriginalL'auteur akf
Vous pouvez essayer de 2 de la requête, la première requête pour compter le nombre total des lignes de la DB et de la deuxième requête est pour le réel de données 🙂 Et pour le côté de l'INTERFACE utilisateur, vous pouvez essayer comme ceci:
And in service layer, you just need use limit function like this :
Ou vous pouvez fourche moi sur github à Page du projet Table d'échange sur Swing 🙂
OriginalL'auteur martinusadyh
J'ai écrit un Java pagination de l'outil dataj. Il utilise JQuery dataTables plug-in de la pagination de métadonnées pour construire la page de résultat.
J'ai également ajouté quelques classes clientes pour Java Swing, y compris un TableRowSorter qui appelle la (côté serveur) le tri plutôt que de les trier à l'intérieur du modèle de table.
N'hésitez pas à télécharger et à me contacter si vous avez des questions. Il est sous licence Apache 2.
OriginalL'auteur andy
Alternativement, vous pouvez faire usage de la
QuickTable
projet.Capture d'écran
Ici est la
DBTable
composant dans l'action:La
DBTable
composant est intégré dans un cadre traditionnelJFrame
.Exemple de code
L'exemple de code suivant produit de la fenêtre montré dans la capture d'écran précédente:
Des ressources et des dépendances
test.csv
H2
Références
Voici une alternative: java-swing-tips.blogspot.fr/2008/03/...
OriginalL'auteur Stephan