IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Documents Java Discussion :

Java - Word : Récupérer les colonnes d'un tableau séparément


Sujet :

Documents Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut Java - Word : Récupérer les colonnes d'un tableau séparément
    Salut à tous,

    Petit problème pour récupérer les colonnes d'un tableau word séparément.
    Qu'est-ce qu'il ne vas pas dans ce code :
    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
    package word;
     
    import java.awt.Color;
    import java.io.FileInputStream;
    import java.util.List;
     
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.border.LineBorder;
    import javax.swing.table.DefaultTableModel;
     
    import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
     
    public class PersoExtractor
    {
    	final static String FILE_PATH = "E:\\2014-2016\\franglais\\vocabulaire_anglais.docx";
     
    	public static void main(String[] args) throws Exception
    	{
    		XWPFDocument document = new XWPFDocument (
    				new FileInputStream(FILE_PATH));
    		// using XWPFWordExtractor Class
    		XWPFWordExtractor we = new XWPFWordExtractor(document);
    		List<XWPFTable> tables = document.getTables();
    		int tableIndex = 0;
    		for (XWPFTable table: tables)
    		{
    			//table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
    			for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++)
    			{
    				XWPFTableRow row = table.getRow(rowIndex);
    				int numberOfCell = row.getTableCells().size();
    				for (int colIndex = 0; colIndex < numberOfCell; colIndex++)
    				{			
    					XWPFTableCell cell = row.getCell(colIndex);
    					//cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
    					table.getRow(rowIndex).getCell(colIndex).getText();
    					String[][] rows = new String[rowIndex][colIndex];
    					rows[rowIndex][colIndex] = table.getRow(rowIndex).getCell(colIndex).getText();
     
    					String col1 = rows[rowIndex][0];
    					String col2 = rows[rowIndex][1];
     
    					System.out.println(col1);
    					/*final String[][] data = 
    							new String[][] {{col1},{col2}};
    					JTable t = new JTable();
    					t.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
    					DefaultTableModel model = (DefaultTableModel) t.getModel();
    					model.addColumn("column 1");
    					model.addColumn("column 2");
    					if (rowIndex < table.getNumberOfRows())
    						model.insertRow(rowIndex, data);
    					JFrame frame = new JFrame("My table");
    					frame.getContentPane().add(t);
    					frame.pack();
    					frame.setVisible(true);
    					*/
    				}
    			}
    			tableIndex++;
    		}
    		we.close();
    		document.close();
    	}
    }
    Merci d'avance pour vos aides

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    C'est presque bon, avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String col1 = table.getRow(rowIndex).getCell(0).getText();
    String col2 = table.getRow(rowIndex).getCell(1).getText();
    Au lieu de m'embêter avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[][] rows = new String[rowIndex][colIndex];
    rows[rowIndex][colIndex] = table.getRow(rowIndex).getCell(colIndex).getText();
    Mais pourquoi m'affiche t-il deux fois chaque lignes ?

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,
    Citation Envoyé par nadong94 Voir le message
    Mais pourquoi m'affiche t-il deux fois chaque lignes ?
    Je dirais que probablement tu as deux colonnes et que pour chaque colonne tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String col1 = rows[rowIndex][0];
    String col2 = rows[rowIndex][1];
    System.out.println(col1);
    Donc tu affiche toujours la col1 pour le rowIndex en cours.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Avec ceci il me fait :
    ligne 1 : valeur bon1, valeur2 vide
    encore ligne 1 : valeur1 bon, valeur2 bon
    ligne 2 : valeur bon1, valeur2 vide
    encore ligne 2 : valeur1 bon, valeur2 bon

    Il le fait pour toutes les lignes :
    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
    private JTable createJTable(String name, String[] values)
    	{
    		JTable table = new JTable();
    		table.setName(name);
    		table.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
     
    		DefaultTableModel model = (DefaultTableModel) table.getModel();
    		model.addColumn("French");
    		model.addColumn("English");
    		//two columns
    		String[] data = new String[values.length];
    		for (int cellContent = 0; cellContent < values.length; cellContent++)
    		{
    			data[cellContent] = values[cellContent];
    			model.addRow(data);
    		}
    		return table;
    	}
    Et dans la Jtable il me met que les deux ligne donc le doublon ligne 1
    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
    private List<JPanel> listJPanel() throws Exception
    	{
    		List<JPanel> listJPanel = new ArrayList<JPanel>();
    		if (jPanel == null)
    		{
    			jPanel = new JPanel();
    			JTable viewTable = new JTable();
    			List<XWPFTable> tables = readAllTables();
    			//Index of tables
    			tableIndex = 0;
    			for (XWPFTable table : tables)
    			{
    				//index of rows
    				for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++)
    				{
    					col1 = table.getRow(rowIndex).getCell(0).getText();
    					col2 = table.getRow(rowIndex).getCell(1).getText();
    					data = new String[] {col1, col2};
     
    					//Create the tables
    					String name = "Table "+ tableIndex;
    					viewTable = createJTable(name, data);
    					//Create the panels
    					jPanel = resizeJTableColumns(viewTable, name);
    					jPanel.setName(name);
    					listJPanel.add(jPanel);
    				}
    				tableIndex++;
    			}
    		}
    		we.close();
    		document.close();
     
    		return listJPanel;
    	}
    Merci encore

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par nadong94 Voir le message
    Et dans la Jtable il me met que les deux ligne donc le doublon ligne 1
    comme je te l'ai dis dans mon précédent post, si tu boucles sur les colonnes pour générer les lignes tu aura autant de ligne qu'il y a de colonne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //two columns
    		String[] data = new String[values.length];
    		for (int cellContent = 0; cellContent < values.length; cellContent++) // tu boucles sur les colonnes... dans ton cas 2 colonnes
    		{
    			data[cellContent] = values[cellContent]; // au 1er tour le tableau data contient values[0] et null et au 2eme tour tu remplaces le null par values[1]
    			model.addRow(data); // pour chaque valeur de values tu ajoute une ligne au modèle... donc 2 colonnes = 2 lignes ajouter
    		}
    Pourquoi ne pas faire simplement :
    Dans ce cas tu aura une seul ligne avec tes 2 valeurs !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Tu as raison, mais maintenant il ne m'affiche que la dernière ligne du dernier tableau ?
    Et donc la jtable ne fait qu'une seule ligne

    Pourtant quand je fais un System.out.println(tables.get(0).getText());Il m'affiche bien toutes les valeurs, le problème vient donc, uniquement de l'affichage de la jtable

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par nadong94 Voir le message
    Tu as raison, mais maintenant il ne m'affiche que la dernière ligne du dernier tableau ?
    C'est qui il ? tu as bien 2 lignes dans le tableau ?

    montre ton dernier code sinon c'est difficile de savoir ce qui ce passe, je suis pas devin !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Je l'ai légèrement modifié :
    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
    private JPanel getJContentPane() throws Exception
    {
    	//Create the tree
    	MyJTree jTree = new MyJTree(getNames());
    	tree = jTree;
    	//Create a panel by table
    	List<XWPFTable> tables = readAllTables();
    	for (int i = 0; i < tables.size(); i++)
    	{
    		jPanel = createJPanel(i);
    		if (jPanel.getName().equals(jTree.getPath()))
    			System.out.println("cool");
    	}
    	//Separated the application
    	splitHorizontal = new JSplitPane (
    			JSplitPane.HORIZONTAL_SPLIT, 
    			tree, jPanel);
    	splitHorizontal.setDividerLocation(175);
    	splitHorizontal.setOneTouchExpandable(true);
     
    	if (jContentPane == null)
    	{
    		jContentPane = new JPanel();
    		jContentPane.setLayout(new BorderLayout());
    		jContentPane.add(splitHorizontal, BorderLayout.CENTER);
    		//jContentPane.add(getJButton(), BorderLayout.EAST);
    	}
    	return jContentPane;
    }
     
    private JPanel createJPanel(int tableIndex) throws Exception
    {
    	if (jPanel == null)
    	{
    		jPanel = new JPanel();
    		JTable viewTable = new JTable();
    		List<XWPFTable> tables = readAllTables();
    		//index of rows
    		for (int rowIndex = 0; rowIndex < tables.get(tableIndex).getNumberOfRows(); rowIndex++)
    		{
    			col1 = tables.get(tableIndex).getRow(rowIndex).getCell(0).getText();
    			col2 = tables.get(tableIndex).getRow(rowIndex).getCell(1).getText();
    			data = new String[] {col1, col2};
     
    			//Create the tables
    			String name = "Table "+ tableIndex;
    			viewTable = createJTable(name, data);
    			//Create the panels
    			jPanel = resizeJTableColumns(viewTable, name);
    			jPanel.setName(name);
    		}			
    	}
    	//System.out.println(tables.get(0).getText());
    	we.close();
    	document.close();
     
    	return jPanel;
    }
    Merci

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Étrange, car quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    model.addRow(values);
    System.out.println(Arrays.toString(values));
    Il m'affiche tout correctement, où est le problème alors ?

  10. #10
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    déjà, il y a un problème avec les datas de ta table, je viens de remonter dans les posts et normalement ta table a deux colonnes...
    d'autre part, pourquoi tu ne définis pas ta table de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] columnNames = { "French", "English" };
    JTable table = new JTable(values, columnNames);
    en sachant que values est un tableau a deux dimension !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    il me dit que : The constructor JTable(String[], String[]) is undefined
    Il me propose de déclarer le String[] values en String[][]

    Et donc ça me fait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    col1 = new String[]{tables.get(tableIndex).getRow(rowIndex).getCell(0).getText()};
    col2 = new String[]{tables.get(tableIndex).getRow(rowIndex).getCell(1).getText()};
    data = new String[][] {col1, col2};
    Et là il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.lang.ArrayIndexOutOfBoundsException: 1
    	at javax.swing.JTable$1.getValueAt(Unknown Source)
    	at javax.swing.JTable.getValueAt(Unknown Source)
    	at projetPerso.PersoExtractor.resizeJTableColumns(PersoExtractor.java:124)
    	at projetPerso.PersoExtractor.createJPanel(PersoExtractor.java:211)
    	at projetPerso.PersoExtractor.getJContentPane(PersoExtractor.java:166)
    	at projetPerso.PersoExtractor.<init>(PersoExtractor.java:59)
    	at projetPerso.Main.main(Main.java:20)
    Ce qui correspond à la ligne : table.getValueAt(row, col), de la méthode de réinitialisation des colonnes de la table :
    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
    private JPanel resizeJTableColumns(JTable table, String name)
    {
    	JPanel panel = new JPanel();
    	if (table != null) {
    		table.setEnabled(false);
    		//table.setFont(Final.getFont());
    		// table column adjust
    		int col = 0, larg = 0, row = 0, width = 0;
     
    		JTableHeader header = table.getTableHeader();
    		Enumeration<TableColumn> columns = table
    				.getColumnModel().getColumns();
     
    		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    		while (columns.hasMoreElements()) { // maximum length of the
    											// text or title of a
    											// column
    			TableColumn column = (TableColumn) columns
    					.nextElement();
    			col = header.getColumnModel().getColumnIndex(
    					column.getIdentifier());
    			width = (int) table
    					.getTableHeader()
    					.getDefaultRenderer()
    					.getTableCellRendererComponent(table,
    							column.getIdentifier(), false, false,
    							-1, col).getPreferredSize().getWidth();
    			for (row = 0; row < table.getRowCount(); row++) {
    				int preferedWidth = (int) table
    						.getCellRenderer(row, col)
    						.getTableCellRendererComponent(table,
    								table.getValueAt(row, col),
    								false, false, row, col)
    						.getPreferredSize().getWidth();
    				width = Math.max(width, preferedWidth);
    			}
    			header.setResizingColumn(column);
    			// System.out.println("column : "+ column);
    			larg = width + table.getIntercellSpacing().width;
    			larg = larg + 20;
    			column.setWidth(larg);
    		}
    		JScrollPane elevator = new JScrollPane(table,
    				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    		elevator.getViewport().setBackground(Color.WHITE);
     
    		panel.setLayout(new BorderLayout());
    		// TitledBorder
    		panel.setBorder(BorderFactory.createTitledBorder(name));
    		panel.setName(name);
    		panel.setBackground(Color.LIGHT_GRAY);
    		// on lui ajoute un ascenseur
    		panel.add(elevator, BorderLayout.CENTER);
    	}
    	return panel;
    }
    Merci encore

  12. #12
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    La déclaration de data n'est pas correct !
    col1 représente une ligne et col2 une autre.
    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] row = new String[]{tables.get(tableIndex).getRow(rowIndex).getCell(0).getText(), tables.get(tableIndex).getRow(rowIndex).getCell(1).getText()};
    data = new String[][] {row};
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Tu as raison, mais on se retrouve comme tout à l'heure, avec uniquement une jtable avec deux colonnes et une seule ligne (la dernière ligne du tableau)

    Voici ma classe complète si ça peux t'aider :
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    package projetPerso;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
     
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSplitPane;
    import javax.swing.JTable;
    import javax.swing.JTree;
    import javax.swing.border.LineBorder;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.TableColumn;
     
    import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
     
    public class PersoExtractor extends JFrame
    {
    	private final static String FILE_PATH = "F:\\2012-2016\\franglais\\vocabulaire_anglais.docx";
     
    	private JSplitPane splitHorizontal;
    	private JSplitPane splitVertical;
    	private JPanel jPanel = null;
    	private JPanel jContentPane = null;
    	private JScrollPane jScrollPane = null;
    	private JTree tree;
     
    	private XWPFDocument document;
    	private XWPFWordExtractor we;
    	private List<XWPFTable> tables;
    	private XWPFTableRow row;
     
    	private String[][] data = new String[][]{};
    	private String[] names = new String[]{};
     
    	private String col1 = "";
    	private String col2 = "";
    	private int tableIndex = 0;
    	private int nbTables = 0;
    	private int numberOfCell;
     
    	/**
             * <p>Constructor no-argument</p>
             * 
             * @throws Exception 
             */
    	public PersoExtractor() throws Exception
    	{
    		this.setTitle("FrAnglais");
    		this.getContentPane().add(getJContentPane());
    		this.pack();
    		this.setVisible(true);
    	}
     
    	private List<XWPFTable> readAllTables() throws Exception
    	{
    		tableIndex = 0;
    		List<XWPFTable> listTables = new ArrayList<XWPFTable>();
    		document = new XWPFDocument (
    				new FileInputStream(FILE_PATH));
    		// using XWPFWordExtractor Class
    		we = new XWPFWordExtractor(document);
    		tables = document.getTables();
    		//index of tables
    		for (XWPFTable table : tables)
    		{
    			names = new String[] {"Table "+ tableIndex};
    			listTables.add(table);
    			tableIndex++;
    		}
    		return listTables;
    	}
     
    	/*private JScrollPane getJScrollPane(JTree tree)
    	{
    		if (jScrollPane == null)
    		{
    			jScrollPane = new JScrollPane();
    			jScrollPane.setViewportView(tree);
    		}
    		return jScrollPane;
    	}*/
     
    	private JPanel resizeJTableColumns(JTable table, String name)
    	{
    		JPanel panel = new JPanel();
    		if (table != null) {
    			table.setEnabled(false);
    			//table.setFont(Final.getFont());
    			// table column adjust
    			int col = 0, larg = 0, row = 0, width = 0;
     
    			JTableHeader header = table.getTableHeader();
    			Enumeration<TableColumn> columns = table
    					.getColumnModel().getColumns();
     
    			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    			while (columns.hasMoreElements()) { // maximum length of the
    												// text or title of a
    												// column
    				TableColumn column = (TableColumn) columns
    						.nextElement();
    				col = header.getColumnModel().getColumnIndex(
    						column.getIdentifier());
    				width = (int) table
    						.getTableHeader()
    						.getDefaultRenderer()
    						.getTableCellRendererComponent(table,
    								column.getIdentifier(), false, false,
    								-1, col).getPreferredSize().getWidth();
    				for (row = 0; row < table.getRowCount(); row++) {
    					int preferedWidth = (int) table
    							.getCellRenderer(row, col)
    							.getTableCellRendererComponent(table,
    									table.getValueAt(row, col),
    									false, false, row, col)
    							.getPreferredSize().getWidth();
    					width = Math.max(width, preferedWidth);
    				}
    				header.setResizingColumn(column);
    				// System.out.println("column : "+ column);
    				larg = width + table.getIntercellSpacing().width;
    				larg = larg + 20;
    				column.setWidth(larg);
    			}
    			JScrollPane elevator = new JScrollPane(table,
    					JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    					JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    			elevator.getViewport().setBackground(Color.WHITE);
     
    			panel.setLayout(new BorderLayout());
    			// TitledBorder
    			panel.setBorder(BorderFactory.createTitledBorder(name));
    			panel.setName(name);
    			panel.setBackground(Color.LIGHT_GRAY);
    			// on lui ajoute un ascenseur
    			panel.add(elevator, BorderLayout.CENTER);
    		}
    		return panel;
    	}
     
    	/**
             * <p>Content Pane</p>
             * 
             * @return ContentPane
             * @throws Exception 
             */
    	private JPanel getJContentPane() throws Exception
    	{
    		//Create the tree
    		MyJTree jTree = new MyJTree(getNames());
    		tree = jTree;
    		//Create a panel by table
    		List<XWPFTable> tables = readAllTables();
    		for (int i = 0; i < tables.size(); i++)
    		{
    			jPanel = createJPanel(i);
    			if (jPanel.getName().equals(jTree.getPath()))
    				System.out.println("cool");
    		}
    		//Separated the application
    		splitHorizontal = new JSplitPane (
    				JSplitPane.HORIZONTAL_SPLIT, 
    				tree, jPanel);
    		splitHorizontal.setDividerLocation(175);
    		splitHorizontal.setOneTouchExpandable(true);
     
    		if (jContentPane == null)
    		{
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BorderLayout());
    			jContentPane.add(splitHorizontal, BorderLayout.CENTER);
    			//jContentPane.add(getJButton(), BorderLayout.EAST);
    		}
    		return jContentPane;
    	}
     
    	/**
             * <p>Create a JTable by JPanel</p>
             * 
             * @return the panel
             * @throws Exception
             */
    	private JPanel createJPanel(int tableIndex) throws Exception
    	{
    		if (jPanel == null)
    		{
    			jPanel = new JPanel();
    			JTable viewTable = new JTable();
    			List<XWPFTable> tables = readAllTables();
    			//index of rows
    			for (int rowIndex = 0; rowIndex < tables.get(tableIndex).getNumberOfRows(); rowIndex++)
    			{
    				col1 = tables.get(tableIndex).getRow(rowIndex).getCell(0).getText();
    				col2 = tables.get(tableIndex).getRow(rowIndex).getCell(1).getText();
    				String[] row = new String[]{col1, col2};
    				data = new String[][] {row};
     
    				//Create the tables
    				String name = "Table "+ tableIndex;
    				viewTable = createJTable(name, data);
    				//Create the panels
    				jPanel = resizeJTableColumns(viewTable, name);
    				jPanel.setName(name);
    			}			
    		}
    		//System.out.println(tables.get(0).getText());
    		we.close();
    		document.close();
     
    		return jPanel;
    	}
     
    	/**
             * <p>Create the JTable</p>
             * 
             * @param name
             * @param values
             * 
             * @return the table
             */
    	private JTable createJTable(String name, String[][] values)
    	{
    		String[] columnNames = { "French", "English" };
    		JTable table = new JTable(values, columnNames);
    		table.setName(name);
    		table.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
     
    		/*DefaultTableModel model = (DefaultTableModel) table.getModel();
    		model.addColumn("French");
    		model.addColumn("English");
    		model.addRow(values);*/
     
    		return table;
    	}
     
    	//========================================
    	//getter and setter
    	public String[] getNames() {
    		return names;
    	}
    	public void setNames(String[] names) {
    		this.names = names;
    	}
    }

  14. #14
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    le createTable doit être a l'exterieur de la boucle de creation des datas ! sinon tu recré a chaque fois ta jtable;
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    C'est pas faux, mais étrangement ça ne change rien :
    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
    private JPanel createJPanel(int tableIndex) throws Exception
    {
    	if (jPanel == null)
    	{
    		jPanel = new JPanel();
    		JTable viewTable = new JTable();
    		List<XWPFTable> tables = readAllTables();
    		//index of rows
    		for (int rowIndex = 0; rowIndex < tables.get(tableIndex).getNumberOfRows(); rowIndex++)
    		{
    			col1 = tables.get(tableIndex).getRow(rowIndex).getCell(0).getText();
    			col2 = tables.get(tableIndex).getRow(rowIndex).getCell(1).getText();
    			String[] row = new String[]{col1, col2};
    			data = new String[][] {row};
     
    			//Create the tables
    			tableName = "Table "+ tableIndex;
    		}
    		viewTable = createJTable(tableName, data);
    		//Create the panels
    		jPanel = resizeJTableColumns(viewTable, tableName);
    		jPanel.setName(tableName);
    	}
    	//System.out.println(tables.get(0).getText());
    	we.close();
    	document.close();
     
    	return jPanel;
    }

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par nadong94 Voir le message
    [...] une seule ligne (la dernière ligne du tableau)
    Forcément :
    Citation Envoyé par nadong94 Voir le message
    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
    private JPanel createJPanel(int tableIndex) throws Exception
    {
    	if (jPanel == null)
    	{
                    /*...*/
    		for (int rowIndex = 0; rowIndex < tables.get(tableIndex).getNumberOfRows(); rowIndex++)
    		{
                            /*...*/
    			data = new String[][] {row};
                            /*...*/
     
    		}
    		viewTable = createJTable(tableName, data);
                            /*...*/
    	}
            /*...*/
     
    }
    Tu créés bien chaque ligne à chaque itération, mais chacune remplace la précédente, et donc tu n'as que la dernière à la fin.

    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
    private JPanel createJPanel(int tableIndex) throws Exception
    {
    	if (jPanel == null)
    	{
                    /*...*/
                    data = new String[tables.get(tableIndex).getNumberOfRows()][0]; 
    		for (int rowIndex = 0; rowIndex < tables.get(tableIndex).getNumberOfRows(); rowIndex++)
    		{
                            /*...*/
    			data[rowIndex] = row;
                            /*...*/
     
    		}
    		viewTable = createJTable(tableName, data);
                            /*...*/
    	}
            /*...*/
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [VBA|EXcel]Moduler les colonnes d'un tableau
    Par quario dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/03/2007, 17h09
  2. Réponses: 6
    Dernier message: 27/09/2006, 20h27
  3. [VBA-E]Formulaire word, récupérer les données dans excel
    Par sablier dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2006, 07h38
  4. récupérer les doublons d'un tableau
    Par stoyak dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2006, 11h50
  5. [javascript] récupérer les "clés" d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo