import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
public class JSTable extends JPanel{
private List<JLabel> head=new ArrayList<JLabel>();
public JSTable(String[] heads,List<String[]> data) {
setLayout(new BorderLayout());
FlowLayout layout=new FlowLayout(FlowLayout.LEFT);
layout.setHgap(0);
JPanel panelTop = new JPanel();
panelTop.setLayout(layout);
panelTop.setBackground(Color.LIGHT_GRAY);
panelTop.setBorder(new EmptyBorder(0,5,0,0));
add(panelTop, BorderLayout.NORTH);
for(int i=0;i<heads.length;i++){
JLabel lblHeader = new JLabel();
lblHeader.setHorizontalAlignment(SwingConstants.CENTER);
lblHeader.setBackground(Color.LIGHT_GRAY);
lblHeader.setText(heads[i]);
if(i>heads.length-1)
lblHeader.setBorder(new MatteBorder(new Insets(0, 0, 0, 1), Color.GRAY));
panelTop.add(lblHeader);
head.add(lblHeader);
}
JScrollPane scrollPane = new JScrollPane();
add(scrollPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
scrollPane.setViewportView(panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
for(int i=0;i<data.size();i++){
GridBagLayout gbl_panelIn = new GridBagLayout();
gbl_panelIn.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
gbl_panelIn.rowHeights = new int[]{0, 0};
gbl_panelIn.columnWeights = new double[]{1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, Double.MIN_VALUE};
gbl_panelIn.rowWeights = new double[]{0.0, Double.MIN_VALUE};
JPanel panelIn = new JPanel();
panelIn.setLayout(gbl_panelIn);
panelIn.setBorder(new MatteBorder(new Insets(0, 0, 1, 0), Color.GRAY));
GridBagConstraints gbc_panelIn = new GridBagConstraints();
gbc_panelIn.insets = new Insets(5, 5, 5, 5);
gbc_panelIn.fill = GridBagConstraints.HORIZONTAL;
gbc_panelIn.gridx = 0;
gbc_panelIn.gridy = i;
panel.add(panelIn, gbc_panelIn);
for(int j=0;j<data.get(i).length;j++){
JLabel lblColumn = new JLabel(data.get(i)[j]);
lblColumn.setHorizontalAlignment(SwingConstants.CENTER);
if(j!=8)
lblColumn.setBorder(new MatteBorder(new Insets(0, 0, 0, 1),Color.GRAY));
if(j==0)
lblColumn.setText(data.get(i)[j]+i);
final int u=j;
lblColumn.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent arg0) {
super.componentResized(arg0);
resizeHead(u,arg0.getComponent().getWidth());
}
});
GridBagConstraints gbc_lblColumn = new GridBagConstraints();
gbc_lblColumn.fill = GridBagConstraints.HORIZONTAL;
gbc_lblColumn.insets = new Insets(5, 0, 5, j!=data.get(i).length-1?0:5);
gbc_lblColumn.gridx = j;
gbc_lblColumn.gridy = 0;
panelIn.add(lblColumn, gbc_lblColumn);
}
}
}
public void resizeHead(int i, int width){
head.get(i).setPreferredSize(new Dimension(width,20));
}
}