Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

JTabbedPane painting question?

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

[Webinar] Lessons on Recovering from Petya

Skyport is working hard to help customers recover from recent attacks, like the Petya worm. This work has brought to light some important lessons. New malware attacks like this can take down your entire environment. Learn from others mistakes on how to prevent Petya like worms.

Question has a verified solution.

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

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
Suggested Courses

715 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