Hallo,
folgender Code macht ja schon fast das was ich will, ich bekomme eine Combobox im TableHeader angezeigt. Nur leider kann ich die nicht "aufklappen" und was auswählen.
Kann mir jemand sagen woran das liegt?
Vielen Dank,
Oli
folgender Code macht ja schon fast das was ich will, ich bekomme eine Combobox im TableHeader angezeigt. Nur leider kann ich die nicht "aufklappen" und was auswählen.
Kann mir jemand sagen woran das liegt?
Code:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
public class ComboBoxImHeader extends JPanel {
public ComboBoxImHeader() {
setLayout(new BorderLayout());
String[] headerStr = { "1", "2", "3" };
DefaultTableModel dm = new DefaultTableModel(headerStr, 4);
JTable table = new JTable(dm);
ComboBoxHeaderRenderer renderer = new ComboBoxHeaderRenderer();
TableColumnModel model = table.getColumnModel();
int n = headerStr.length;
for (int i = 0; i < n; i++) {
model.getColumn(i).setHeaderRenderer(renderer);
}
JTableHeader header = table.getTableHeader();
header.addMouseListener(new HeaderListener(header, renderer));
JScrollPane pane = new JScrollPane(table);
add(pane, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame f = new JFrame("Combobox im Header");
f.getContentPane().add(new ComboBoxImHeader(), BorderLayout.CENTER);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.pack();
}
class HeaderListener extends MouseAdapter {
JTableHeader header;
ComboBoxHeaderRenderer renderer;
HeaderListener(JTableHeader header, ComboBoxHeaderRenderer renderer) {
this.header = header;
this.renderer = renderer;
}
public void mousePressed(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
renderer.setPressedColumn(col);
header.repaint();
System.out.println("Column: " + col);
}
public void mouseReleased(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
renderer.setPressedColumn(-1);
header.repaint();
}
}
class ComboBoxHeaderRenderer extends JComboBox implements TableCellRenderer {
int pushedColumn;
public ComboBoxHeaderRenderer() {
pushedColumn = -1;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
addItem("1");
addItem("2");
addItem("3");
addItem("4");
addItem("5");
addItem("6");
return this;
}
public void setPressedColumn(int col) {
pushedColumn = col;
}
}
}
Vielen Dank,
Oli