Solved

JTabbedPane painting question?

Posted on 1998-08-14
5
821 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?
0
Comment
Question by:beemer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 4

Expert Comment

by:evijay
ID: 1232790
please send sample code

0
 

Author Comment

by:beemer
ID: 1232791
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;
}
0
 
LVL 3

Accepted Solution

by:
mjenkins earned 50 total points
ID: 1232792
The problem you are having comes from the setOpaque() call. You should setOpaque(true) for all of your panels if you want them to paint the background.
0
 

Author Comment

by:beemer
ID: 1232793
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;
}
0
 
LVL 3

Expert Comment

by:mjenkins
ID: 1232794
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.
0

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

634 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question