Problème d'affichage JTree, JTable, JPanel

Fermé
nadong94 Messages postés 11 Date d'inscription vendredi 27 mai 2016 Statut Membre Dernière intervention 1 juillet 2016 - 8 juin 2016 à 10:16
nadong94 Messages postés 11 Date d'inscription vendredi 27 mai 2016 Statut Membre Dernière intervention 1 juillet 2016 - 1 juil. 2016 à 14:55
Salut à tous,

Je crée une application structurée de la façon suivante :
un JSplitPane Horizontal dans le quel, a gauche le tree et à droite un panel avec jtable
Les problèmes :
► JTree : il me met un jTree par défaut, comme si que je faisais une instance de trop et qui annule le miens
► JTable/JPanel : il me met que le dernier panel, et la jtable à que les entêtes avec trois lignes vides

Voici la classe MyJTree :
package projetPerso;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.TreePath;

public class MyJTree extends JTree
{
private JPanel jContentPane = null;
private JScrollPane jScrollPane = null;
private JButton jButton = null;
private String[] values;

private JTree getJTree()
{
//Root
DefaultMutableTreeNode root;
//Node 1
DefaultMutableTreeNode node1;
//Node 2
DefaultMutableTreeNode node2;

//Initialized the root
root = new DefaultMutableTreeNode ("FrAnglais");
//Initialized the node 1
node1 = new DefaultMutableTreeNode ("Vocabulary");
//Initialized the node 2
for (String val : values)
{
node2 = new DefaultMutableTreeNode (val);
//Added the Node 2 to Node 1
node1.add(node2);
}
//Added to the root
root.add(node1);
/*String[] elements = { "Element 1", "Element 2", "Element 3", "Element 4"};
JComboBox jCombo = new JComboBox(elements);
DefaultTreeCellEditor editor = new DefaultTreeCellEditor(jTree,
new DefaultTreeCellRenderer(), new DefaultCellEditor(jCombo));
jTree = new JTree(racine);*/
//this.putClientProperty("JTree.lineStyle","Horizontal");
this.putClientProperty("JTree.lineStyle","Angled");
this.setShowsRootHandles(false);
this.setRootVisible(true);
this.setEditable(false);
//this.setCellEditor(editor);
this.addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent evt)
{
TreePath path = getPathForLocation(evt.getX(),
evt.getY());
if (path != null) {
System.out.println("Mouse path= "
+ path.getLastPathComponent());
}
}
});
this.addTreeSelectionListener(new TreeSelectionListener() {

public void valueChanged(TreeSelectionEvent e)
{
Object obj = getLastSelectedPathComponent();
System.out.println("--------------------");
System.out.println("getLastSelectedPathComponent=" + obj);
System.out.println("getPath=" + e.getPath());
System.out.println("getNewLeadSelectionPath="
+ e.getNewLeadSelectionPath());
System.out.println("getOldLeadSelectionPath="
+ e.getOldLeadSelectionPath());
TreePath[] paths = e.getPaths();

for (int i = 0; i < paths.length; i++) {
System.out.println("Path " + i + "=" + paths[i]);
}
System.out.println("--------------------");
}
});
this.addTreeExpansionListener(new TreeExpansionListener() {
@Override
public void treeExpanded(TreeExpansionEvent evt) {
System.out.println("expand, path=" + evt.getPath());
}
@Override
public void treeCollapsed(TreeExpansionEvent evt) {
System.out.println("collapse, path=" + evt.getPath());
}
});
/*this.addTreeWillExpandListener(new TreeWillExpandListener() {

@Override
public void treeWillCollapse(TreeExpansionEvent event)
throws ExpandVetoException {

throw new ExpandVetoException(event);
}

@Override
public void treeWillExpand(TreeExpansionEvent event)
throws ExpandVetoException
{

}
});*/
this.setCellRenderer(new MyTreeCellRenderer());

return this;
}

private JScrollPane getJScrollPane()
{
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJTree());
}
return jScrollPane;
}

/*private JButton getJButton()
{
if (jButton == null)
{
jButton = new JButton();
jButton.addActionListener(new MyActionListener(this, getJTree()));
}
return jButton;
}*/

/*public static void main(String[] args)
{
MyJTree testJtree = new MyJTree();
testJtree.setVisible(true);
}*/

public MyJTree(String[] values)
{
super();
this.values = values;
getJScrollPane();
}
}

La classe où je crée le reste :
package projetPerso;

import java.awt.BorderLayout;
import java.awt.Color;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
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.DefaultTableModel;
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 = "E:\\2014-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) { nbTables = tables.size(); //table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000)); //index of rows while (tableIndex <= nbTables) { names = new String[] {"Table "+ tableIndex}; tableIndex++; //break; listTables.add(table); } } return listTables; } /*private JScrollPane getJScrollPane(JTree tree) { if (jScrollPane == null) { jScrollPane = new JScrollPane(); jScrollPane.setViewportView(tree); } return jScrollPane; }*/ 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"); String[] data = new String[values.length]; for (int cellContent = 0; cellContent <= values.length; cellContent++) { data = new String[cellContent]; model.addRow(data); } return table; } 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 panel JPanel panel = getJPanel(); //Create the tree tree = new MyJTree(getNames()); //Separated the application splitHorizontal = new JSplitPane ( JSplitPane.HORIZONTAL_SPLIT, tree, panel); 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 getJPanel() throws Exception { 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++) { row = table.getRow(rowIndex); numberOfCell = row.getTableCells().size(); data = new String[numberOfCell]; //index of columns for (int colIndex = 0; colIndex < numberOfCell; colIndex++) { //column col1 = table.getRow(rowIndex).getCell(0).getText(); col2 = table.getRow(rowIndex).getCell(1).getText(); data = new String[] {col1, col2}; } } tableIndex++; } //Create the tables tableIndex = 0; while (tableIndex <= nbTables) { //Create the tables String name = "Table "+ tableIndex; viewTable = createJTable(name, data); jPanel = resizeJTableColumns(viewTable, name); jPanel.setName(name); tableIndex++; //break; } } we.close(); document.close(); return jPanel; } //======================================== //getter and setter public String[] getNames() { return names; } public void setNames(String[] names) { this.names = names; }}

Je ne met pas le treeCellRenderer ni le actionListener car il fonctionne.
Autrement ce code est exécutable.

Merci d'avance pour vos aides :) :) :)


1 réponse

nadong94 Messages postés 11 Date d'inscription vendredi 27 mai 2016 Statut Membre Dernière intervention 1 juillet 2016 1
1 juil. 2016 à 14:55
Quelques nouvelles,

Désormais, au moment où j'exécute, m'a table n'affiche que la dernière ligne, pourquoi ?

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;
}


Pourtant quand je fais ceci, il m'affiche bien toutes les valeurs de la table :
model.addRow(values);
System.out.println(Arrays.toString(values));


Merci d'avance pour vos aides :)



0