Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6840439
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T23:50:39+00:00 2026-05-26T23:50:39+00:00

I inspired by MeBigFatGuy interesting question , in this conection I have very specific

  • 0

I inspired by MeBigFatGuy interesting question, in this conection I have very specific question about Graphisc2D, how to change BackGround Color by depends if is JTables Row visible in the JViewPort,

1) if 1st. & last JTables Row will be visible in the JViewPort, then BackGround would be colored to the Color.red

2) if 1st. & last JTables Row will not be visible in the JViewPort, then BackGround would be colored to the Color.whatever

enter image description here

from SSCCE

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.RepaintManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.TableModel;

/*
https://stackoverflow.com/questions/1249278/
how-to-disable-the-default-painting-behaviour-of-wheel-scroll-event-on-jscrollpan
 *
and
 *
https://stackoverflow.com/questions/8195959/
swing-jtable-event-when-row-is-visible-or-when-scrolled-to-the-bottom
 */
public class ViewPortFlickering {

    private JFrame frame = new JFrame("Table");
    private JViewport viewport = new JViewport();
    private Rectangle RECT = new Rectangle();
    private Rectangle RECT1 = new Rectangle();
    private JTable table = new JTable(50, 3);
    private javax.swing.Timer timer;
    private int count = 0;

    public ViewPortFlickering() {
        GradientViewPort tableViewPort = new GradientViewPort(table);
        viewport = tableViewPort.getViewport();
        viewport.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                RECT = table.getCellRect(0, 0, true);
                RECT1 = table.getCellRect(table.getRowCount() - 1, 0, true);
                Rectangle viewRect = viewport.getViewRect();
                if (viewRect.intersects(RECT)) {
                    System.out.println("Visible RECT -> " + RECT);
                } else if (viewRect.intersects(RECT1)) {
                    System.out.println("Visible RECT1 -> " + RECT1);
                } else {
                    //
                }
            }
        });
        frame.add(tableViewPort);
        frame.setPreferredSize(new Dimension(600, 300));
        frame.pack();
        frame.setLocation(50, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        RepaintManager.setCurrentManager(new RepaintManager() {

            @Override
            public void addDirtyRegion(JComponent c, int x, int y, int w, int h) {
                Container con = c.getParent();
                while (con instanceof JComponent) {
                    if (!con.isVisible()) {
                        return;
                    }
                    if (con instanceof GradientViewPort) {
                        c = (JComponent) con;
                        x = 0;
                        y = 0;
                        w = con.getWidth();
                        h = con.getHeight();
                    }
                    con = con.getParent();
                }
                super.addDirtyRegion(c, x, y, w, h);
            }
        });
        frame.setVisible(true);
        start();
    }

    private void start() {
        timer = new javax.swing.Timer(100, updateCol());
        timer.start();
    }

    public Action updateCol() {
        return new AbstractAction("text load action") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {

                System.out.println("updating row " + (count + 1));
                TableModel model = table.getModel();
                int cols = model.getColumnCount();
                int row = 0;
                for (int j = 0; j < cols; j++) {
                    row = count;
                    table.changeSelection(row, 0, false, false);
                    timer.setDelay(100);
                    Object value = "row " + (count + 1) + " item " + (j + 1);
                    model.setValueAt(value, count, j);
                }
                count++;
                if (count >= table.getRowCount()) {
                    timer.stop();
                    table.changeSelection(0, 0, false, false);
                    java.awt.EventQueue.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                            table.clearSelection();
                        }
                    });
                }
            }
        };
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ViewPortFlickering viewPortFlickering = new ViewPortFlickering();
            }
        });
    }
}

class GradientViewPort extends JScrollPane {

    private static final long serialVersionUID = 1L;
    private final int h = 50;
    private BufferedImage img = null;
    private BufferedImage shadow = new BufferedImage(1, h, BufferedImage.TYPE_INT_ARGB);
    private JViewport viewPort;

    public GradientViewPort(JComponent com) {
        super(com);
        viewPort = this.getViewport();
        viewPort.setScrollMode(JViewport.BLIT_SCROLL_MODE);
        viewPort.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);
        viewPort.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
        Graphics2D g2 = shadow.createGraphics();
        g2.setPaint(new Color(250, 150, 150));
        g2.fillRect(0, 0, 1, h);
        g2.setComposite(AlphaComposite.DstIn);
        g2.setPaint(new GradientPaint(0, 0, new Color(0, 0, 0, 0f), 0, h,
                new Color(0.5f, 0.8f, 0.8f, 0.5f)));
        g2.fillRect(0, 0, 1, h);
        g2.dispose();
    }

    @Override
    public void paint(Graphics g) {
        if (img == null || img.getWidth() != getWidth() || img.getHeight() != getHeight()) {
            img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
        }
        Graphics2D g2 = img.createGraphics();
        super.paint(g2);
        Rectangle bounds = getViewport().getVisibleRect();
        g2.scale(bounds.getWidth(), -1);
        int y = (getColumnHeader() == null) ? 0 : getColumnHeader().getHeight();
        g2.drawImage(shadow, bounds.x, -bounds.y - y - h, null);
        g2.scale(1, -1);
        g2.drawImage(shadow, bounds.x, bounds.y + bounds.height - h + y, null);
        g2.dispose();
        g.drawImage(img, 0, 0, null);
    }
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T23:50:42+00:00Added an answer on May 26, 2026 at 11:50 pm

    since I search for different suggestion I closed this question with my original knowledges about Graphics

    enter image description here
    enter image description here
    enter image description here

    based on code

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.image.BufferedImage;
    //import java.awt.image.ColorModel; // I don't know how to use that
    //import java.awt.image.SampleModel;// I don't know how to use that
    import javax.swing.*;
    import javax.swing.RepaintManager;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import javax.swing.table.TableModel;
    
    public class ViewPortFlickeringOriginal {
    
        private JFrame frame = new JFrame("Table");
        private JViewport viewport = new JViewport();
        private Rectangle RECT = new Rectangle();
        private Rectangle RECT1 = new Rectangle();
        private JTable table = new JTable(50, 3);
        private javax.swing.Timer timer;
        private int count = 0;
        private boolean topOrBottom = false;
        private GradientViewPortOriginal tableViewPort;
    
        public ViewPortFlickeringOriginal() {
            tableViewPort = new GradientViewPortOriginal(table);
            viewport = tableViewPort.getViewport();
            viewport.addChangeListener(new ChangeListener() {
    
                @Override
                public void stateChanged(ChangeEvent e) {
                    if (tableViewPort.bolStart) {
                        RECT = table.getCellRect(0, 0, true);
                        RECT1 = table.getCellRect(table.getRowCount() - 1, 0, true);
                        Rectangle viewRect = viewport.getViewRect();
                        if (viewRect.intersects(RECT)) {
                            System.out.println("Visible RECT -> " + RECT);
                            tableViewPort.paintBackGround(new Color(250, 150, 150));
                        } else if (viewRect.intersects(RECT1)) {
                            System.out.println("Visible RECT1 -> " + RECT1);
                            tableViewPort.paintBackGround(new Color(150, 250, 150));
                        } else {
                            System.out.println("Visible RECT1 -> ???? ");
                            tableViewPort.paintBackGround(new Color(150, 150, 250));
                        }
                    }
                }
            });
            frame.add(tableViewPort);
            frame.setPreferredSize(new Dimension(600, 300));
            frame.pack();
            frame.setLocation(50, 100);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            RepaintManager.setCurrentManager(new RepaintManager() {
    
                @Override
                public void addDirtyRegion(JComponent c, int x, int y, int w, int h) {
                    Container con = c.getParent();
                    while (con instanceof JComponent) {
                        if (!con.isVisible()) {
                            return;
                        }
                        if (con instanceof GradientViewPortOriginal) {
                            c = (JComponent) con;
                            x = 0;
                            y = 0;
                            w = con.getWidth();
                            h = con.getHeight();
                        }
                        con = con.getParent();
                    }
                    super.addDirtyRegion(c, x, y, w, h);
                }
            });
            frame.setVisible(true);
            start();
        }
    
        private void start() {
            timer = new javax.swing.Timer(100, updateCol());
            timer.start();
        }
    
        public Action updateCol() {
            return new AbstractAction("text load action") {
    
                private static final long serialVersionUID = 1L;
    
                @Override
                public void actionPerformed(ActionEvent e) {
    
                    System.out.println("updating row " + (count + 1));
                    TableModel model = table.getModel();
                    int cols = model.getColumnCount();
                    int row = 0;
                    for (int j = 0; j < cols; j++) {
                        row = count;
                        table.changeSelection(row, 0, false, false);
                        timer.setDelay(100);
                        Object value = "row " + (count + 1) + " item " + (j + 1);
                        model.setValueAt(value, count, j);
                    }
                    count++;
                    if (count >= table.getRowCount()) {
                        timer.stop();
                        table.changeSelection(0, 0, false, false);
                        java.awt.EventQueue.invokeLater(new Runnable() {
    
                            @Override
                            public void run() {
                                table.clearSelection();
                                tableViewPort.bolStart = true;
                            }
                        });
                    }
                }
            };
        }
    
        public static void main(String[] args) {
            java.awt.EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    ViewPortFlickeringOriginal viewPortFlickering = new ViewPortFlickeringOriginal();
                }
            });
        }
    }
    
    class GradientViewPortOriginal extends JScrollPane {
    
        private static final long serialVersionUID = 1L;
        private final int h = 50;
        private BufferedImage img = null;
        private BufferedImage shadow = new BufferedImage(1, h, BufferedImage.TYPE_INT_ARGB);
        private JViewport viewPort;
        public boolean bolStart = false;
    
        public GradientViewPortOriginal(JComponent com) {
            super(com);
            viewPort = this.getViewport();
            viewPort.setScrollMode(JViewport.BLIT_SCROLL_MODE);
            viewPort.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);
            viewPort.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
            paintBackGround(new Color(250, 150, 150));
        }
    
        public void paintBackGround(Color g) {
            Graphics2D g2 = shadow.createGraphics();
            g2.setPaint(g);
            g2.fillRect(0, 0, 1, h);
            g2.setComposite(AlphaComposite.DstIn);
            g2.setPaint(new GradientPaint(0, 0, new Color(0, 0, 0, 0f), 0, h,
                    new Color(0.1f, 0.8f, 0.8f, 0.5f)));
            g2.fillRect(0, 0, 1, h);
            g2.dispose();
        }
    
        @Override
        public void paint(Graphics g) {
            if (img == null || img.getWidth() != getWidth() || img.getHeight() != getHeight()) {
                img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
            }
            Graphics2D g2 = img.createGraphics();
            super.paint(g2);
            Rectangle bounds = getViewport().getVisibleRect();
            g2.scale(bounds.getWidth(), -1);
            int y = (getColumnHeader() == null) ? 0 : getColumnHeader().getHeight();
            g2.drawImage(shadow, bounds.x, -bounds.y - y - h, null);
            g2.scale(1, -1);
            g2.drawImage(shadow, bounds.x, bounds.y + bounds.height - h + y, null);
            g2.dispose();
            g.drawImage(img, 0, 0, null);
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Inspired by the discussion in this question . We have all been taught that
Inspired by this question How can I force GDB to disassemble? I wondered about
Somewhat inspired by this question about a graphical programming environment. I don't think that
Inspired by another question asking about the missing Zip function: Why is there no
Inspired by this question , I wanted to try my hand at the latest
Inspired by this question and answer , how do I create a generic permutations
Inspired by this question I began wondering why the following examples are all illegal
Inspired by the recent question about 2d grids in Haskell, I'm wondering if it
Inspired by this question on Meta , I wrote two queries on the Stack
Inspired by this question . I commonly see people referring to JavaScript as a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.