JTable og TableModel m.m.
Hej jeg har lige et par småting der driller ved min JTable1)
Når jeg får vist min tabel, så har den ingen column headers og jeg har ikke lige kunnet gennemskue hvad jeg har gjort galt.....
2) Jeg vil gerne vise en en bestemt celle med en anden baggrund end de andre og jeg har set eksempler på at man kan gøre det ved at angive det i sit dataset, sådan her:
private Object[][] data = {"felt1",.....,new Color(51, 51, 153),....."flere felter"}
3) Jeg vil også gerne kunne vise 4 små tekstfelter ved siden af hinanden i samme celle. Det har jeg forsøgt på med klassen TrackField, men det bliver ikke vist korrekt....
Hele min kode kommer her.....
----------------------------------------------------------
public class TrackField {
private JTextField field1 = new JTextField();
private JTextField field2 = new JTextField();
private JTextField field3 = new JTextField();
private JTextField field4 = new JTextField();
public TrackField()
{
JPanel container = new JPanel(new FlowLayout());
container.add(field1);
container.add(field2);
container.add(field3);
container.add(field4);
}
}
------------------------------------------------------------------
public class GUI extends JApplet implements MouseListener {
public static JButton moveRows;
public void destroy() {
super.destroy();
// insert code to release resources here
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
static {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch (Exception e) {} // If no Windows look and feel, just use default
}
public void paint(Graphics g) {
super.paint(g);
// insert code to paint the applet here
}
public void start() {super.start();
// insert any code to be run when the applet starts here
}
public void stop() {super.stop();
// insert any code to be run when the applet is stopped here
}
public void init() {
try {
super.init();
addMouseListener(this);
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
createGUI();
}
});
} catch (Exception e) {
System.err.println("createGUI didn't successfully complete");
}
}
private ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == moveRows) {
//find markeret række og husk på placeringen
//skift tekst på knappen og husk på at knappen er aktiveret, således at
//når brugeren igen klikker på knappen
//skal der byttes rundt på to eller flere linjer i tabellen
//if()
}
}
};
private void createGUI() {
DataTableModel dtm = new DataTableModel();
DataTable data = new DataTable(dtm);
JPanel topPanel = new JPanel();
JComboBox machines = new JComboBox();
machines.addItem("Maskine 1");
JLabel lastUpdated = new JLabel("Sidst opdateret :" + new Date());
moveRows = new JButton("Move");
moveRows.addActionListener(actionListener);
topPanel.add(machines);
topPanel.add(lastUpdated);
topPanel.add(moveRows);
JPanel bottomPanel = new JPanel();
bottomPanel.add(data);
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(bottomPanel);
scrollPane.setViewportView(bottomPanel);
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topPanel, scrollPane);
splitPane.setDividerLocation(130);
splitPane.setEnabled(false);
getContentPane().add(splitPane, BorderLayout.CENTER);
}
}
--------------------------------------------------------------
public class DataTableModel extends AbstractTableModel {
private int numberColumns = 14;
private String[] columnNames = {"Urgent","Order #","Design","Dlv. date","Order size","Produced","Tool","Board","Customer","Text","Sheet status","Order location","Comment","Track"};
private Object[][] data = {
{new Boolean(false), "828496","K9165-AAA", new Date(), "100.000", "297.500", "2/1 B-Slant Ext", "54/0675", "CoRo Food", "Original appelsin", new Color(51, 51, 153), Color.green, "Kommentar", new TrackField()},
{new Boolean(true), "828496","K9165-AAA", new Date(), "100.000", "297.500", "2/1 B-Slant Ext", "54/0675", "CoRo Food", "Original appelsin", Color.red + "Ej klar", "DTP" + Color.green, "Kommentar", new TrackField()}
};
public DataTableModel() {}
public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
public Object getValueAt(int row, int col) {return data[row][col];}
public int getColumnCount() { return numberColumns; }
public String getColumnName(int column) { return columnNames[column]; }
public int getRowCount() {return data.length;}
}
----------------------------------------------------------------
public class DataTable extends JTable {
DataTableModel tableModel = null;
DataTable table = null;
public DataTable(TableModel tm) {
super(tm);
table = this;
tableModel = (DataTableModel)tm;
/*
getTableHeader().setReorderingAllowed(false);
setDragEnabled(false);
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//skal ændres ift bruger
setShowHorizontalLines(true);
setGridColor(Color.lightGray);
//setShowVerticalLines(false);
configureEnclosingScrollPane();
setAutoResizeMode(AUTO_RESIZE_OFF);
setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 11));
setColumnSelectionAllowed(true);
setRowSelectionAllowed(true);
setCellSelectionEnabled(true);*/
setPreferredScrollableViewportSize(new Dimension(975, 745));
//tilføj listlistener
/*ListSelectionModel rowSM = getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
}
});*/
//tilføj mouselistener
/*addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
int[] rows = getSelectedRows();
if (rows.length < 2) {
int row = rowAtPoint(e.getPoint());
if (row != -1 && (rows.length == 0 || (rows.length == 1 && rows[0] != row))) {
table.clearSelection();
table.addRowSelectionInterval(row, row);
table.addColumnSelectionInterval(0, table.getColumnCount()-1);
}
}
rows = getSelectedRows();
if (rows.length > 0) {
}
}
//Vis info vinduet ved dobbeltklik på en vilkårlig række i tabellen
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
}
}
});*/
//resetSizes();
packColumns(this, 2);
}
public void resetSizes() {
getColumnModel().getColumn(0).setPreferredWidth(30);
getColumnModel().getColumn(1).setPreferredWidth(60);
getColumnModel().getColumn(2).setPreferredWidth(90);
getColumnModel().getColumn(3).setPreferredWidth(150);
getColumnModel().getColumn(4).setPreferredWidth(50);
getColumnModel().getColumn(5).setPreferredWidth(50);
getColumnModel().getColumn(6).setPreferredWidth(90);
getColumnModel().getColumn(7).setPreferredWidth(90);
getColumnModel().getColumn(8).setPreferredWidth(90);
getColumnModel().getColumn(9).setPreferredWidth(50);
getColumnModel().getColumn(10).setPreferredWidth(50);
getColumnModel().getColumn(11).setPreferredWidth(50);
getColumnModel().getColumn(12).setPreferredWidth(50);
getColumnModel().getColumn(13).setPreferredWidth(50);
}
public void selectFirst() {
try {
setRowSelectionInterval(0, 0);
setColumnSelectionInterval(1, 1);
}
catch (Exception e) {}
}
public void packColumns(JTable table, int margin) {
for (int c = 0; c < table.getColumnCount(); c++) {
packColumn(table, c, 2);
}
}
public void packColumn(JTable table, int colIndex, int margin) {
DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel();
TableColumn col = colModel.getColumn(colIndex);
int width = 0;
// Get width of column header
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {renderer = table.getTableHeader().getDefaultRenderer();}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
// Get maximum width of column data
for (int r=0; r<table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, colIndex);
comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, colIndex), false, false, r, colIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
// Add margin
width += 2*margin;
// Set the width
col.setPreferredWidth(width);
}
public boolean isSelectedRow() { return (getSelectedRows().length == 1); }
public boolean isSelectedRows() { return (getSelectedRows().length >= 1); }
public String getToolTipText(MouseEvent event)
{
int row = rowAtPoint( event.getPoint() );
int col = columnAtPoint( event.getPoint() );
Object o = getValueAt(row,col);
if( o == null )
return null;
if( o.toString().equals("") )
return null;
return o.toString();
}
public Point getToolTipLocation(MouseEvent event)
{
int row = rowAtPoint( event.getPoint() );
int col = columnAtPoint( event.getPoint() );
Object o = getValueAt(row,col);
if( o == null )
return null;
if( o.toString().equals("") )
return null;
Point pt = getCellRect(row, col, true).getLocation();
pt.translate(-1,-2);
return pt;
}
}
