We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

JTabbedPane painting question?

beemer
beemer asked
on
Medium Priority
836 Views
Last Modified: 2012-06-21
I am using JTabbedPane and I am having some painting problems.  Whenever I switch tabs, there is residual painting from the previous tab.  How can I get rid of this behavior?  I have tried the following:

//Trying to fix bad painting when switching tabs...
            tabPane.addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e)
                {
                    JComponent comp = (JComponent)tabPane.getComponentAt(tabPane.getSelectedIndex());
                    comp.paintImmediately(comp.getVisibleRect());
                }
            });

This did not correct the problem though.  Has anyone ran across this same problem before, and if so how did you correct it?
Comment
Watch Question

Commented:
please send sample code

Author

Commented:
package Contract;

import com.sun.java.swing.*;
import com.sun.java.swing.event.*;
import java.beans.*;
import java.awt.*;

import com.sun.java.swing.JSplitPane;
import com.sun.java.swing.JPanel;
public class ContractSummary extends com.sun.java.swing.JPanel
{
      public ContractSummary()
      {
            super();
            //{{INIT_CONTROLS
            setOpaque(false);
            GridBagLayout gridBagLayout;
            gridBagLayout = new GridBagLayout();
            setLayout(gridBagLayout);
            setSize(708,509);
            setFont(new Font("Dialog", Font.PLAIN, 11));
            setForeground(new Color(0));
            setBackground(new Color(-3355444));
            topPnl = new com.sun.java.swing.JPanel();
            topPnl.setOpaque(false);
            topPnl.setLayout(new BorderLayout(0,0));
            topPnl.setBounds(5,5,669,373);
            topPnl.setFont(new Font("Dialog", Font.PLAIN, 12));
            topPnl.setForeground(new Color(0));
            topPnl.setBackground(new Color(-3355444));
            GridBagConstraints gbc;
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 0.7;
            gbc.weighty = 0.7;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.insets = new Insets(5,5,5,5);
            ((GridBagLayout)getLayout()).setConstraints(topPnl, gbc);
            add(topPnl);
            bottomPnl = new com.sun.java.swing.JPanel();
            bottomPnl.setOpaque(false);
            bottomPnl.setLayout(new BorderLayout(0,0));
            bottomPnl.setBounds(5,388,669,159);
            bottomPnl.setFont(new Font("Dialog", Font.PLAIN, 12));
            bottomPnl.setForeground(new Color(0));
            bottomPnl.setBackground(new Color(-3355444));
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.weightx = 0.3;
            gbc.weighty = 0.3;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.insets = new Insets(5,5,5,5);
            ((GridBagLayout)getLayout()).setConstraints(bottomPnl, gbc);
            add(bottomPnl);
            //}}

            //{{REGISTER_LISTENERS
            //}}
            contractPnl = new Contracts();
            topPnl.add(contractPnl, BorderLayout.CENTER);
            
            profilePnl = new ContractProfile();
            attachmentsPnl = new ContractAttachments();
            correspondencePnl = new ContractCorrespondence();
            coveragePnl = new ContractCoverage();
            
            tabPane = new JTabbedPane();
            tabPane.addTab("Profile", profilePnl);
            tabPane.addTab("Attachments", attachmentsPnl);
            tabPane.addTab("Correspondence", correspondencePnl);
            tabPane.addTab("Coverages", coveragePnl);
            bottomPnl.add(tabPane, BorderLayout.CENTER);
            
            /*
            //Trying to fix bad painting when switching tabs...
            tabPane.addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e)
                {
                    JComponent comp = (JComponent)tabPane.getComponentAt(tabPane.getSelectedIndex());
                    comp.paintImmediately(comp.getVisibleRect());
                }
            });
            */
      }

      //{{DECLARE_CONTROLS
      com.sun.java.swing.JPanel topPnl;
      com.sun.java.swing.JPanel bottomPnl;
      //}}
    Contracts               contractPnl;
    ContractAttachments     attachmentsPnl;
    ContractProfile         profilePnl;
    ContractCorrespondence  correspondencePnl;
    ContractCoverage        coveragePnl;
    JTabbedPane             tabPane;
}
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:
That seemed to correct the problem I was experiencing, but now, the first time my panel with the tabs is displayed, the first tab is showing, but the tab buttons and raised border does not appear, but if I resize the app, it does appear.

package Contract;

import com.sun.java.swing.*;
import com.sun.java.swing.event.*;
import java.beans.*;
import java.awt.*;

import com.sun.java.swing.JSplitPane;
import com.sun.java.swing.JPanel;
public class ContractSummary extends com.sun.java.swing.JPanel
{
      public ContractSummary()
      {
            super();
            //{{INIT_CONTROLS
            GridBagLayout gridBagLayout;
            gridBagLayout = new GridBagLayout();
            setLayout(gridBagLayout);
            setSize(708,509);
            setFont(new Font("Dialog", Font.PLAIN, 11));
            setForeground(new Color(0));
            setBackground(new Color(-3355444));
            topPnl = new com.sun.java.swing.JPanel();
            topPnl.setLayout(new BorderLayout(0,0));
            topPnl.setBounds(5,5,698,342);
            topPnl.setFont(new Font("Dialog", Font.PLAIN, 12));
            topPnl.setForeground(new Color(0));
            topPnl.setBackground(new Color(-3355444));
            GridBagConstraints gbc;
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weightx = 0.7;
            gbc.weighty = 0.7;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.insets = new Insets(5,5,5,5);
            ((GridBagLayout)getLayout()).setConstraints(topPnl, gbc);
            add(topPnl);
            bottomPnl = new com.sun.java.swing.JPanel();
            bottomPnl.setLayout(new BorderLayout(0,0));
            bottomPnl.setBounds(5,357,698,146);
            bottomPnl.setFont(new Font("Dialog", Font.PLAIN, 12));
            bottomPnl.setForeground(new Color(0));
            bottomPnl.setBackground(new Color(-3355444));
            gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.weightx = 0.3;
            gbc.weighty = 0.3;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.insets = new Insets(5,5,5,5);
            ((GridBagLayout)getLayout()).setConstraints(bottomPnl, gbc);
            add(bottomPnl);
            //}}

            //{{REGISTER_LISTENERS
            //}}
            contractPnl = new Contracts();
            topPnl.add(contractPnl, BorderLayout.CENTER);
            
            profilePnl = new ContractProfile();
            attachmentsPnl = new ContractAttachments();
            correspondencePnl = new ContractCorrespondence();
            coveragePnl = new ContractCoverage();
            
            tabPane = new JTabbedPane();
            tabPane.addTab("Profile", profilePnl);
            tabPane.addTab("Attachments", attachmentsPnl);
            tabPane.addTab("Correspondence", correspondencePnl);
            tabPane.addTab("Coverages", coveragePnl);
            bottomPnl.add(tabPane, BorderLayout.CENTER);
      }

      //{{DECLARE_CONTROLS
      com.sun.java.swing.JPanel topPnl;
      com.sun.java.swing.JPanel bottomPnl;
      //}}
    Contracts               contractPnl;
    ContractAttachments     attachmentsPnl;
    ContractProfile         profilePnl;
    ContractCorrespondence  correspondencePnl;
    ContractCoverage        coveragePnl;
    JTabbedPane             tabPane;
}

Commented:
Not knowing the details of the sub-panels:

Contracts               contractPnl;
ContractAttachments     attachmentsPnl;
ContractProfile         profilePnl;
ContractCorrespondence  correspondencePnl;
ContractCoverage        coveragePnl;
JTabbedPane             tabPane;

Nor how you are displaying the whole thing, I can only guess.
I would first try calling tabPane.invalidate() right before you setVisible(true);  That should cause the BorderLayout to re-layout the whole thing. As an alternative, you can call getSize() on the ContractSummary and then setSize( size.width+1, size.height+1 ) -- this is an old trick from the 1.0.2 days to cause the panel to re-layout after it's been shown.

If neither of these work, post the code you use to create and display the ContractSummary and I'll fix it for you.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.