/** * Creates a {@link Border} that paints any empty space to the right of the last column header * in the given {@link JTable}'s {@link JTableHeader}. */ private static Border createTableHeaderEmptyColumnPainter(final JTable table) { return new AbstractBorder() { @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { // if this JTableHeader is parented in a JViewport, then paint the table header // background to the right of the last column if neccessary. JViewport viewport = (JViewport) table.getParent(); if (viewport != null && table.getWidth() < viewport.getWidth()) { int startX = table.getWidth(); int emptyColumnWidth = viewport.getWidth() - table.getWidth(); paintHeader(g, table, startX, emptyColumnWidth); } } }; }
public Insets getInsets(Insets insets) { Border border = getBorder(); if (border instanceof AbstractBorder && insets != null) { return ((AbstractBorder) border).getBorderInsets(this, insets); } Insets originalInsets; if (border == null) { originalInsets = super.getInsets(); } else { originalInsets = border.getBorderInsets(this); } if (insets != null) { insets.set(originalInsets.top, originalInsets.left, originalInsets.bottom, originalInsets.right); return insets; } return originalInsets; }
/** * Creates a {@link Border} that paints any empty space to the right of the last column header * in the given {@link JTable}'s {@link JTableHeader}. */ @SuppressWarnings("serial") private static Border createTableHeaderEmptyColumnPainter(final JTable table) { return new AbstractBorder() { @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { // if this JTableHeader is parented in a JViewport, then paint the table header // background to the right of the last column if neccessary. JViewport viewport = (JViewport) table.getParent(); if (viewport != null && table.getWidth() < viewport.getWidth()) { int startX = table.getWidth(); int emptyColumnWidth = viewport.getWidth() - table.getWidth(); paintHeader(g, table, startX, emptyColumnWidth); } } }; }
public static void main(String[] args) { for (Border border : BORDERS) { System.out.println(border.getClass()); test(border, border.getBorderInsets(getComponent(border))); if (border instanceof AbstractBorder) { test((AbstractBorder) border); } } }
private static void test(AbstractBorder border) { Insets insets = new Insets(0, 0, 0, 0); if (insets != border.getBorderInsets(getComponent(border), insets)) { throw new Error("both instances are differ for " + border.getClass()); } test(border, insets); }
/** * @param defaults * @param componentPrefix * @param borderKey */ private void replaceBorder(DefaultsList defaults, String componentPrefix, String borderKey) { String key = componentPrefix + borderKey; Border border = UIManager.getBorder(componentPrefix + borderKey); if (border instanceof AbstractBorder && border instanceof UIResource && border.getClass().getName().contains("ListTable")) { border = new SafeBorder((AbstractBorder) border); // PENDING JW: this is fishy ... adding to lookAndFeelDefaults is taken UIManager.getLookAndFeelDefaults().put(key, border); // adding to defaults is not // defaults.add(key, border); } }
@Test public void testSafeBorderBehavingDelegate() { JComponent comp = new JButton(); AbstractBorder delegate = new BevelBorder(BevelBorder.LOWERED); SafeBorder border = new SafeBorder(delegate); assertNotNull(border.getBorderInsets(comp)); assertNotNull(border.getBorderInsets(comp, null)); }
/** * Creates a {@link Border} that paints any empty space to the right of the * last column header in the given {@link JTable}'s {@link JTableHeader}. * * @param table DOCUMENT ME! * * @return DOCUMENT ME! */ private static Border createTableHeaderEmptyColumnPainter(final JTable table) { return new AbstractBorder() { @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { // if this JTableHeader is parented in a JViewport, then paint // the table header background to the right of the last column // if neccessary. Container viewport = table.getParent(); if ((viewport instanceof JViewport) && table.getWidth() < viewport.getWidth()) { int startX = table.getWidth(); int emptyColumnWidth = viewport.getWidth() - table.getWidth(); TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); // Rossi: Fix for indexoutofbounds exception: A try catch might be good too? Component component = renderer.getTableCellRendererComponent(table, "", false, false, 0, table.getColumnCount()-1); component.setBounds(0, 0, emptyColumnWidth, table.getTableHeader().getHeight()); ((JComponent) component).setOpaque(true); CELL_RENDER_PANE.paintComponent(g, component, null, startX, 0, emptyColumnWidth + 1, table.getTableHeader().getHeight(), true); } } }; }
private void checkInsets(final AbstractBorder border, final Insets testInsets) { assertEquals(testInsets, border.getBorderInsets(newJComponent())); assertFalse(border.isBorderOpaque()); Insets insets = new Insets(0, 0, 0, 0); border.getBorderInsets(newJComponent(), insets); assertEquals(border.getBorderInsets(newJComponent()), insets); JComponent button = newJComponent(); assertFalse(border.getBorderInsets(button) == border.getBorderInsets(button)); }
protected void setupBorder(ComboBoxButton comboBoxButton) { comboBoxButton.setBorder(new AbstractBorder() { @Override public Insets getBorderInsets(Component c) { final Insets insets = super.getBorderInsets(c); //noinspection UseDPIAwareInsets return new Insets(insets.top, insets.left + JBUI.scale(2), insets.bottom, insets.right + JBUI.scale(2) + getArrowIcon().getIconWidth()); } }); }
@Override protected void setupBorder(ComboBoxButton comboBoxButton) { comboBoxButton.setBorder(new AbstractBorder() { @Override public Insets getBorderInsets(Component c) { final Insets insets = super.getBorderInsets(c); //noinspection UseDPIAwareInsets return new Insets(insets.top, insets.left + JBUI.scale(4), insets.bottom, insets.right + JBUI.scale(20)); } }); }