Essayer de créer JTable avec un en-tête de ligne approprié

Je suis en train de créer un JTable qui a une ligne d'en-tête qui ressemble à un en-tête de colonne, et j'ai passé beaucoup trop beaucoup de temps sur ça :/
Ma situation est semblable à cette question: JTable En-Tête De Ligne De La Mise En Œuvre
et peut-être celui-ci:
personnalisation de jtable cellrenderer avec table de la cellule d'en-tête de couleur

Ils ne semblent pas avoir réussi à me faire tout le chemin là encore. J'ai cherché essayé de nombreux exemples et tous en sont dépourvues. Il n'y a pas encore d'exemples de tables avec des en-têtes de ligne à tous à partir de Oracle/Sun. Il semble que ce genre de tableau ne devrait pas être si rare.

Juste les formats de la première colonne, mais il n'est pas tout regarder ou agir comme l'en-tête de colonne:
http://java-swing-tips.blogspot.com/2011/01/jtable-rowheader.html

Celui-ci semble utiliser une JList de la ligne d'en-tête et il a des problèmes d'alignement (de +de 1 pixel de chaque ligne) et n'a pas l'air plus agréable lorsque j'ai mis le Look et la Sensation.
http://www.java2s.com/Code/Java/Swing-Components/TableRowHeaderExample.htm

Ce un ressemble à l'idée que j'nécessaires à son utilisation (la ligne d'en-tête est séparée JTable mais est ensuite chargé de la JScrollPane comme la ligne d'en-tête), mais j'ai besoin de l'adapter à mon code, puis assurez-vous que la ligne d'en-tête obtient la bonne apparence de l'en-tête.
http://www.chka.de/swing/table/row-headers/JTable.html

Qu'est ce que j'ai fait moins le dernier bit. J'essaie d'obtenir de la table d'en-tête du moteur de rendu pour être le moteur de rendu pour l'en-tête de ligne trop. L'en-tête de ligne/de la première colonne est maintenant gris au lieu de blanc, comme il l'était quand il était juste une autre colonne de données, mais ne peut toujours pas regarder comme l'en-tête de colonne. Est-ce exact? Ou devrais-je m'en tiens à la garder comme une chronique régulière dans la table principale et de faire autre chose avec elle?

Donc voici mon code pour la mise à jour de la table. Cette méthode est simplement un tableau de Chaîne pour l'en-tête de colonne, un tableau de Chaîne de la ligne d'en-tête, et un 2D tableau de chaînes pour les principales données. J'ai une JTable dispTableRowHeader de la ligne d'en-tête et un JTable dispTable pour les principales données de la table.

    private void updateDispTable(String[][] graphicalTable, String[] graphicalTableColumnHeader, String[] graphicalTableRowHeader) {

    //set model for the main data table, put in data. Also prevent editing cells
    dispTable.setModel(new javax.swing.table.DefaultTableModel(
        graphicalTable,
        graphicalTableColumnHeader
    ){
        @Override
        public boolean isCellEditable(int rowIndex, int mColIndex) {
            return false;
        }
    });

    //some mods for main data table
    dispTable.getTableHeader().setReorderingAllowed(false);//Was also able to do this within NetBeans GUI Builder by doing Table Contents from Jtable inspector item
    dispTable.getTableHeader().setResizingAllowed(false);

    //load main table to scrollpane
    jScrollPane2.setViewportView(dispTable);

    //get model for JTable that will be used as the row header, fill in values
    DefaultTableModel rowHeaderTableModel = new DefaultTableModel(0, 1);//one column
    for (int i = 0; i < graphicalTable.length; i++)
        rowHeaderTableModel.addRow(new Object[] { graphicalTableRowHeader[i] } );

    //set model for row header, put in data. Alter renderer to make it like col header
    dispTableRowHeader.setModel(rowHeaderTableModel);
    dispTableRowHeader.setDefaultRenderer(Object.class, dispTableRowHeader.getTableHeader().getDefaultRenderer());//makes it gray but not like the header :/
    //dispTableRowHeader.setDefaultRenderer(Object.class, jScrollPane2.getColumnHeader().getDefaultRenderer());

    //load row header to scrollpane's row header
    jScrollPane2.setRowHeaderView(dispTableRowHeader);

    //set the table corner and disallow reordering and resizing
    JTableHeader corner = dispTableRowHeader.getTableHeader();
    corner.setReorderingAllowed(false);
    corner.setResizingAllowed(false);
    jScrollPane2.setCorner(JScrollPane.UPPER_LEFT_CORNER, corner);//load to scrollpane
}

J'apprécie beaucoup tous de l'aide!

MODIFIER EN DESSOUS DE MODIFIER EN DESSOUS DE
J'ai créé un tout nouveau projet pour expérimenter et essayé trashgod de la méthode (bien que le fait pour un en-tête de ligne plutôt que comme une deuxième ligne) et j'ai trouvé qu'il m'a donné le même résultat de la juste cellules de style gris plutôt que de style comme l'en-tête. Ensuite, j'ai essayé de supprimer mon Regard et la Sensation de réglage

        //Set System L&F
        UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

et de la ligne d'en-tête semblait être la même que l'en-tête de colonne! .. mais c'est dans Nimbus ou quelle que soit la présentation par défaut. Voir les images ci-dessous. La première est avec mon Regard et se Sentir ensemble du système comme ci-dessus (Win7), et la deuxième est par défaut.

Système de Look and Feel (Win7)- Essayer de créer JTable avec un en-tête de ligne approprié

De Java Nimbus Look and Feel- Essayer de créer JTable avec un en-tête de ligne approprié

Assez sûr que la même chose arrive avec mon programme. Donc maintenant il semble que mon problème est avec le Regard et la Sensation. Je veux qu'il ressemble plus à la première image (système de look and feel), mais avec le côté gauche de style trop.

Par ailleurs, voici un exemple dans Win7 de MySQL Workbench, qui a le bon style de ligne et de colonne d'en-têtes et ils ont tous deux même l'ombre les cellules bleutées sur passage de la souris. Dommage qu'il n'est pas en Java afin que je puisse essayer de vérifier comment ils ont fait.

MySQL Workbench capture d'écran- Essayer de créer JTable avec un en-tête de ligne approprié

MODIFIER EN DESSOUS DE MODIFIER EN DESSOUS DE
SSCCE code

package mytableexample2;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class MyTableExample2 extends javax.swing.JFrame {
public MyTableExample2() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable(){
@Override
public Component prepareRenderer(
TableCellRenderer renderer, int row, int col) {
if (col == 0) {
return this.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(this,
this.getValueAt(row, col), false, false, row, col);
} else {
return super.prepareRenderer(renderer, row, col);
}
}
};
jTable1.setAutoCreateRowSorter(false);
final JTableHeader header = jTable1.getTableHeader();
header.setDefaultRenderer(new HeaderRenderer(jTable1));
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"Row 1", "Data 2", "Data 3", "Data 4", "Data 5"},
{"Row 2", "Data 6", "Data 7", "Data 8", "Data 9"},
{"Row 3", "Data 10", "Data 11", "Data 12", "Data 13"}
},
new String [] {
"", "Col 1", "Col 2", "Col 3", "Col 4"
}
));
jScrollPane1.setViewportView(jTable1);
//Netbeans generated layout
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}
public static void main(String args[]) {
try {
//THIS SETS TO SYSTEM'S LOOK AND FEEL
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
//THIS SETS TO OTHER JAVA LOOK AND FEEL
//UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(MyTableExample2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(MyTableExample2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(MyTableExample2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(MyTableExample2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyTableExample2().setVisible(true);
}
});
}
//Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
}
class HeaderRenderer implements TableCellRenderer {
TableCellRenderer renderer;
public HeaderRenderer(JTable jTable1) {
renderer = jTable1.getTableHeader().getDefaultRenderer();
}
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int col) {
return renderer.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, col);
}
}

source d'informationauteur mikato