Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

JTabbedPane painting question?

Posted on 1998-08-14
5
Medium Priority
?
824 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
  • 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 200 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

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

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

Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
The viewer will learn how to implement Singleton Design Pattern in Java.
Suggested Courses

916 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