Hallo, ich habe folgende Table. Wenn ich diese initialisiere, dann geht meine Prozessorauslastung auf 100 %.
Ich hab keine Idee, woran das liegen kann. Hat jemand einen Tipp für mich?
Danke Oli
Ich hab keine Idee, woran das liegen kann. Hat jemand einen Tipp für mich?
Danke Oli
Java:
public class TablePruefParameterAuswahl extends JTable {
private static final long serialVersionUID = 1L;
public int colsLength = 0;
public Object[] cols;
public TablePruefParameterAuswahl(Object[][] rows, Object[] cols) {
super(rows, cols);
this.cols = cols;
colsLength = cols.length;
setModel(getTableModel(rows, cols));
getTableHeader().setReorderingAllowed(false);
setFont(new Font("Arial", Font.PLAIN, 14));
setRowHeight(25);
setGridColor(Color.black);
getTableHeader().setBorder(BorderFactory.createLineBorder(Color.black));
setBorder(BorderFactory.createLineBorder(Color.black));
setBackground(Color.white);
getTableHeader().setDefaultRenderer(new MyHeaderRenderer());
UIManager.put("Table.focusCellHighlightBorder", new LineBorder(new Color(0x483d8b), 2));
SwingUtilities.updateComponentTreeUI(this);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i < getColumnCount(); i++) {
while (!packColumn(this, i, 15))
;
}
}
@Override
public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (c instanceof JLabel) {
JLabel label = (JLabel) c;
label.setHorizontalAlignment(JLabel.LEFT);
setFont(new Font("Arial", Font.BOLD, 14));
label.setText(" " + label.getText());
if (column == 0) {
label.setBackground(new Color(0x708090));
label.setForeground(Color.white);
}
else if (column % 2 == 0) {
label.setBackground(new Color(0xf5deb4));
label.setForeground(Color.black);
}
else {
label.setBackground(new Color(0xd8bfd8));
label.setForeground(Color.black);
}
}
return c;
}
public DefaultTableModel getTableModel(Object[][] rows, Object[] cols) {
return new DefaultTableModel(rows, cols) {
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int i, int j) {
if (j == 2)
return true;
else
return false;
}
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 0)
return PruefParameter.class;
if (columnIndex == 2)
return Boolean.class;
else
return String.class;
}
};
}
class MyHeaderRenderer extends JButton implements TableCellRenderer {
private static final long serialVersionUID = 1L;
int pushedColumn;
public MyHeaderRenderer() {
super();
setOpaque(true);
setForeground(UIManager.getColor("TableHeader.foreground"));
setBackground(UIManager.getColor("TableHeader.background"));
setBorder(BorderFactory.createLineBorder(Color.black));
setToolTipText("Zum Wählen der Durchmesser und Farbcodes hier klicken.");
setBorder(null);
pushedColumn = -1;
setMargin(new Insets(0, 0, 0, 0));
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((value == null) ? "" : value.toString());
setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.black));
if (column == 0)
// setPreferredSize(new Dimension(200, 25));
if (column == 1)
// setPreferredSize(new Dimension(200, 25));
if (column == 2)
// setPreferredSize(new Dimension(50, 25));
setFont(new Font("Arial", Font.BOLD, 14));
setText(" " + getText());
repaint();
return this;
}
public void setPressedColumn(int col) {
pushedColumn = col;
}
}
public boolean packColumn(JTable table, int vColIndex, int margin) {
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(vColIndex);
int width = 0;
TableCellRenderer renderer = (MyHeaderRenderer) col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0);
width = comp.getPreferredSize().width;
for (int r = 0; r < table.getRowCount(); r++) {
renderer = table.getCellRenderer(r, vColIndex);
comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false, r, vColIndex);
width = Math.max(width, comp.getPreferredSize().width);
}
width += 2 * margin;
if (width > 1000) {
return false;
}
col.setPreferredWidth(width);
return true;
}
}