Solved

JTabbedPane painting question?

Posted on 1998-08-14
5
815 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 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
My project did see openJDK that I installed. What could be the problem 7 123
Unable to start eclipse ? 17 132
VB Script to add site to Java Exception List 4 49
MySQL  on Tomcat 8 27
For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

910 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

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now