mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-07 06:20:53 +03:00
Table: Fixed painting of alternating rows below table if auto-resize mode is JTable.AUTO_RESIZE_OFF and table is smaller than scroll pane. Below alternating rows were not updated when table width changed and were painted on wrong side in right-to-left component orientation
This commit is contained in:
@@ -23,6 +23,10 @@ FlatLaf Change Log
|
||||
`<big>`, `<small>` and `<samp>` in HTML text for components Button, CheckBox,
|
||||
RadioButton, MenuItem (and subclasses), JideLabel, JideButton, JXBusyLabel and
|
||||
JXHyperlink. Also fixed for Label and ToolTip if using Java 11+.
|
||||
- Table: Fixed painting of alternating rows below table if auto-resize mode is
|
||||
`JTable.AUTO_RESIZE_OFF` and table width is smaller than scroll pane (was not
|
||||
updated when table width changed and was painted on wrong side in
|
||||
right-to-left component orientation).
|
||||
- Theme Editor: Fixed occasional empty window on startup on macOS.
|
||||
|
||||
#### Incompatibilities
|
||||
@@ -88,8 +92,8 @@ FlatLaf Change Log
|
||||
- Improved log messages for loading fails.
|
||||
- Fonts: Updated **Inter** to
|
||||
[v4.0](https://github.com/rsms/inter/releases/tag/v4.0).
|
||||
- Table: Select all text in cell editor when starting editing using `F2` key.
|
||||
(issue #652)
|
||||
- Table: Select all text in cell editor when starting editing using `F2` key on
|
||||
Windows or Linux. (issue #652)
|
||||
|
||||
#### Fixed bugs
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@ import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.event.ComponentListener;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.FocusListener;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
@@ -132,6 +135,7 @@ public class FlatTableUI
|
||||
private TableCellRenderer oldBooleanRenderer;
|
||||
|
||||
private PropertyChangeListener propertyChangeListener;
|
||||
private ComponentListener outsideAlternateRowsListener;
|
||||
private Map<String, Object> oldStyleValues;
|
||||
|
||||
public static ComponentUI createUI( JComponent c ) {
|
||||
@@ -266,6 +270,11 @@ public class FlatTableUI
|
||||
|
||||
table.removePropertyChangeListener( propertyChangeListener );
|
||||
propertyChangeListener = null;
|
||||
|
||||
if( outsideAlternateRowsListener != null ) {
|
||||
table.removeComponentListener( outsideAlternateRowsListener );
|
||||
outsideAlternateRowsListener = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -513,8 +522,6 @@ public class FlatTableUI
|
||||
boolean paintOutside = UIManager.getBoolean( "Table.paintOutsideAlternateRows" );
|
||||
Color alternateColor;
|
||||
if( paintOutside && (alternateColor = UIManager.getColor( "Table.alternateRowColor" )) != null ) {
|
||||
g.setColor( alternateColor );
|
||||
|
||||
int rowCount = table.getRowCount();
|
||||
|
||||
// paint alternating empty rows below the table
|
||||
@@ -523,10 +530,56 @@ public class FlatTableUI
|
||||
int tableWidth = table.getWidth();
|
||||
int rowHeight = table.getRowHeight();
|
||||
|
||||
g.setColor( alternateColor );
|
||||
|
||||
int x = viewport.getComponentOrientation().isLeftToRight() ? 0 : viewportWidth - tableWidth;
|
||||
for( int y = tableHeight, row = rowCount; y < viewportHeight; y += rowHeight, row++ ) {
|
||||
if( row % 2 != 0 )
|
||||
g.fillRect( 0, y, tableWidth, rowHeight );
|
||||
g.fillRect( x, y, tableWidth, rowHeight );
|
||||
}
|
||||
|
||||
// add listener on demand
|
||||
if( outsideAlternateRowsListener == null && table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF ) {
|
||||
outsideAlternateRowsListener = new FlatOutsideAlternateRowsListener();
|
||||
table.addComponentListener( outsideAlternateRowsListener );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---- class OutsideAlternateRowsListener ---------------------------------
|
||||
|
||||
/**
|
||||
* Used if table auto-resize-mode is off to repaint outside alternate rows
|
||||
* when table width changed (column resized) or component orientation changed.
|
||||
*/
|
||||
private class FlatOutsideAlternateRowsListener
|
||||
extends ComponentAdapter
|
||||
{
|
||||
@Override
|
||||
public void componentHidden( ComponentEvent e ) {
|
||||
Container viewport = SwingUtilities.getUnwrappedParent( table );
|
||||
if( viewport instanceof JViewport )
|
||||
viewport.repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void componentMoved( ComponentEvent e ) {
|
||||
repaintAreaBelowTable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void componentResized( ComponentEvent e ) {
|
||||
repaintAreaBelowTable();
|
||||
}
|
||||
|
||||
private void repaintAreaBelowTable() {
|
||||
Container viewport = SwingUtilities.getUnwrappedParent( table );
|
||||
if( viewport instanceof JViewport ) {
|
||||
int viewportHeight = viewport.getHeight();
|
||||
int tableHeight = table.getHeight();
|
||||
if( tableHeight < viewportHeight )
|
||||
viewport.repaint( 0, tableHeight, viewport.getWidth(), viewportHeight - tableHeight );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user