Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7440603
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T10:52:39+00:00 2026-05-29T10:52:39+00:00

Users of my software need to be able to click on different tabs to

  • 0

Users of my software need to be able to click on different tabs to see different types of data representations. However, the code I am including below does not show the requested data panel when the user clicks on a tab.

You can re-create the problem easily by running the code below, and then following these steps in the GUI which the code will produce:

1.) Select "New" from the file menu    
2.) Click on "AnotherTab" in the internal frame which will appear

Depending on which line of code you comment out below, the tab will either just show a blank panel or will show a tiny red square in the middle of the top of the panel.

The lines of code that you can toggle/comment-out to recreate this problem are:

GraphPanel myGP = new GraphPanel();
//GraphPanel myGP = new GraphPanel(width,height);

These lines of code are in GraphGUI.java below.

Can anyone show me how to fix the code below so that myGP gets displayed at the full size of the panel containing it?

Here are the three java files required to recreate this problem:

ParentFrame.java

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;

public class ParentFrame extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
JLayeredPane desktop;
JInternalFrame internalFrame;

public ParentFrame() {
    super("Parent Frame");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(800, 400));
    Panel p = new Panel();
    this.add(p, BorderLayout.SOUTH);
    desktop = new JDesktopPane();
    setJMenuBar(createMenuBar());
    this.add(desktop, BorderLayout.CENTER);
    this.pack();
    this.setSize(new Dimension(800, 600));
    this.setLocationRelativeTo(null);
}
protected JMenuBar createMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    //Set up the File menu.
    JMenu FileMenu = new JMenu("File");
    FileMenu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(FileMenu);
    //Set up the first menu item.
    JMenuItem menuItem = new JMenuItem("New");
    menuItem.setMnemonic(KeyEvent.VK_N);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));
    menuItem.setActionCommand("new");
    menuItem.addActionListener(new OpenListener());
    FileMenu.add(menuItem);
    //Set up the second menu item.
    menuItem = new JMenuItem("Quit");
    menuItem.setMnemonic(KeyEvent.VK_Q);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK));
    menuItem.setActionCommand("quit");
    menuItem.addActionListener(this);
    FileMenu.add(menuItem);

    return menuBar;
    }
class OpenListener implements ActionListener {
    private static final int DELTA = 40;
    private int offset = DELTA;
    public void actionPerformed(ActionEvent e) {
        // create internal frame
        int ifWidth = 600;
        int ifHeight = 300;
        internalFrame = new JInternalFrame("Internal Frame", true, true, true, true);
        internalFrame.setLocation(offset, offset);
        offset += DELTA;

        // create jtabbed pane
        JTabbedPane jtp = createTabbedPane();
        internalFrame.add(jtp);
        desktop.add(internalFrame);
        internalFrame.pack();
        internalFrame.setSize(new Dimension(ifWidth,ifHeight));
        internalFrame.setVisible(true);
    }
}
private JTabbedPane createTabbedPane() {
    JTabbedPane jtp = new JTabbedPane();
    jtp.setMinimumSize(new Dimension(600,300));
    createTab(jtp, "One Tab");
    createTab(jtp, "AnotherTab");
    createTab(jtp, "Tab #3");
    return jtp;
}
private void createTab(JTabbedPane jtp, String s) {
    if(s=="AnotherTab"){
        jtp.getHeight();
        jtp.getWidth();
        GraphGUI myGraphGUI = new GraphGUI(jtp.getHeight(),jtp.getWidth());
        jtp.add(s, myGraphGUI);
    }
    else{jtp.add(s, new JLabel("TabbedPane " + s, JLabel.CENTER));}
}
public static void main(String args[]) {
    ParentFrame myParentFrame = new ParentFrame();
    myParentFrame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {if ("quit".equals(e.getActionCommand())){System.exit(0);}}
}

GraphGUI.java: This is the one where you can toggle comments to re-create the problem.

import javax.swing.*;

class GraphGUI extends JPanel{
GraphGUI(int height,int width) {
    //REPRODUCE ERROR BY COMMENTING OUT EITHER ONE OF NEXT TWO LINES:
    GraphPanel myGP = new GraphPanel();
//      GraphPanel myGP = new GraphPanel(width,height);
    this.add(myGP);
    this.setVisible(true);// Display the panel.
}
}

GraphPanel.java:

import java.awt.*;
import javax.swing.*;

class GraphPanel extends JPanel {
Insets ins; // holds the panel's insets
double[] plotData;
double xScale;

GraphPanel(int w, int h) {
    setOpaque(true);// Ensure that panel is opaque.
    setPreferredSize(new Dimension(w, h));// Set preferred dimension as specfied.
    setMinimumSize(new Dimension(w, h));// Set preferred dimension as specfied.
    setMaximumSize(new Dimension(w, h));// Set preferred dimension as specfied.
}
GraphPanel() {
    setOpaque(true);// Ensure that panel is opaque.
}

protected void paintComponent(Graphics g){// Override paintComponent() method.
    super.paintComponent(g);// Always call superclass method first.
    int height = getHeight();// Get height of component.
    int width = getWidth();// Get width of component.
    System.out.println("height, width are: "+height+" , "+width);
    ins = getInsets();// Get the insets.
    // Get dimensions of text
    Graphics2D g2d = (Graphics2D)g;
    FontMetrics fontMetrics = g2d.getFontMetrics();
    String xString = ("x-axis label");
    int xStrWidth = fontMetrics.stringWidth(xString);
    int xStrHeight = fontMetrics.getHeight();
    String yString = "y-axis label";
    int yStrWidth = fontMetrics.stringWidth(yString);
    int yStrHeight = fontMetrics.getHeight();
    String titleString ="Title of Graphic";
    int titleStrWidth = fontMetrics.stringWidth(titleString);
    int titleStrHeight = fontMetrics.getHeight();
    //get margins
    int leftMargin = ins.left;
    //set parameters for inner rectangle
    int hPad=10;
    int vPad = 6;
    int numYticks = 10;
    int testLeftStartPlotWindow = ins.left+5+(3*yStrHeight);
    int testInnerWidth = width-testLeftStartPlotWindow-ins.right-hPad;
    int remainder = testInnerWidth%numYticks;
    int leftStartPlotWindow = testLeftStartPlotWindow-remainder;
    System.out.println("remainder is: "+remainder);
    int blueWidth = testInnerWidth-remainder;
    int blueTop = ins.bottom+(vPad/2)+titleStrHeight;
    int bottomPad = (3*xStrHeight)-vPad;
    int blueHeight = height-bottomPad-blueTop;

    g.setColor(Color.red);
    int redWidth = width-leftMargin-1;
    //plot outer rectangle
    g.drawRect(leftMargin, ins.bottom, redWidth, height-ins.bottom-1);
    System.out.println("blueWidth is: "+blueWidth);
    // fill inner rectangle
    g.setColor(Color.white);
    g.fillRect(leftStartPlotWindow, blueTop, blueWidth, blueHeight);

    //write top label
    g.setColor(Color.black);
    g.drawString(titleString, (width/2)-(titleStrWidth/2), titleStrHeight);

    //write x-axis label
    g.setColor(Color.red);
    g.drawString(xString, (width/2)-(xStrWidth/2), height-ins.bottom-vPad);
    g2d.rotate(Math.toRadians(-90), 0, 0);//rotate text 90 degrees counter-clockwise
    //write y-axis label
    g.drawString(yString, -(height/2)-(yStrWidth/2), yStrHeight);
    g2d.rotate(Math.toRadians(+90), 0, 0);//rotate text 90 degrees clockwise
    // plot inner rectangle
    g.setColor(Color.blue);
    g.drawRect(leftStartPlotWindow, blueTop, blueWidth, blueHeight);
}
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T10:52:39+00:00Added an answer on May 29, 2026 at 10:52 am
    class GraphGUI extends JPanel {
    
        .
        .
        GraphGUI(int height,int width) {
        // components in a GridLayout are stretched to fit space available
        setLayout(new GridLayout());
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I need to be able to periodically send email alerts to subscribed users. PHP
I'm trying to simulate some software and I need the user to be able
i'm working on a windows software which can display all the users, groups and
My company transcodes videos sent in by users (recorder by our own screenrecording software)
Recently two users of our software from the same company started experiencing random closures
I need to be able to loop through the next occurrence of a given
At my consulting company, we use some very expensive simulation software. I need a
I need to be able to take a formula that uses the OpenDocument formula
Any recommendations for software to allow users to edit a workflow representing a business
I have a timetable in memory, and need to be able to print it

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.