Skip to content

Instantly share code, notes, and snippets.

@aterai
Created January 11, 2017 10:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aterai/cbe63ef6abb3beb08c10ae84e07a2f10 to your computer and use it in GitHub Desktop.
Save aterai/cbe63ef6abb3beb08c10ae84e07a2f10 to your computer and use it in GitHub Desktop.
import java.awt.*;
import java.util.Objects;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class TransparentHeaderTest {
public JComponent makeUI() {
Color alphaZero = new Color(0x0, true);
String[] columnNames = {"AAA", "BBBB", "CCCCC"};
Object[][] data = {
{"aaa", "eee", "fff"}, {"bbb", "ggg", "hh"},
{"CCC", "ii", "jj"}, {"DDD", "k", "llllll"}
};
JTable table = new JTable(new DefaultTableModel(data, columnNames)) {
@Override public void updateUI() {
super.updateUI();
setOpaque(false);
setFocusable(false);
setRowSelectionAllowed(true);
setFillsViewportHeight(true);
setShowVerticalLines(false);
setIntercellSpacing(new Dimension(0, 1));
setRowHeight(24);
setBackground(alphaZero);
setSelectionForeground(getForeground());
setSelectionBackground(new Color(0, 0, 100, 50));
getTableHeader().setDefaultRenderer(new TransparentHeader());
getTableHeader().setOpaque(false);
getTableHeader().setBackground(alphaZero);
}
};
JScrollPane scroll = new JScrollPane(table);
scroll.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
return scroll;
}
public static void main(String... args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new TransparentHeaderTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
class TransparentHeader implements TableCellRenderer {
private final JLabel label = new JLabel();
private final Border b = BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK);
@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
label.setText(Objects.toString(value, ""));
label.setHorizontalAlignment(SwingConstants.LEFT);
label.setBorder(b);
return label;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment