2

The program is supposed to refresh both tabbed panes every time a new choose drop down is selected. Unfortunatly, nothing is repainted/refreshed. I have already tried both repaint and revalidate in multiple areas of the code. Does anyone know what I can do to fix this problem?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Scanner;
import java.util.*;
import java.io.*;

class Help extends JFrame
{
  private    JTabbedPane tabbedPane;
  private    JPanel panel1;
  private    JPanel panel2;

  public Help()
  {

     final JPanel topPanel = new JPanel();
     topPanel.setLayout( new BorderLayout() );
     getContentPane().add( topPanel );

     String[] choose = {"1", "2", "3"};

    final JComboBox chooseBox = new JComboBox(choose);

    JPanel topPanelHeader = new JPanel();
    topPanelHeader.setLayout(new BorderLayout());
    JPanel topPanelHeader2 = new JPanel();
    topPanelHeader2.setLayout(new BorderLayout());

    JButton submit = new JButton("Submit");
    JLabel chooseLabel = new JLabel("Choose one       ");
    JLabel blank = new JLabel("                                       ");


    chooseBox.setSelectedIndex(0);
    topPanelHeader2.add(chooseLabel, BorderLayout.WEST);
    topPanelHeader2.add(chooseBox, BorderLayout.CENTER);
    topPanelHeader2.add(blank, BorderLayout.EAST);
    topPanelHeader.add(submit, BorderLayout.EAST);
    topPanelHeader.add(topPanelHeader2, BorderLayout.WEST);
    topPanel.add(topPanelHeader, BorderLayout.NORTH);

    createPage1(-1);
    createPage2(-1);

    // Create a tabbed pane
    tabbedPane = new JTabbedPane();
    tabbedPane.addTab( "Tab One", panel1 );
    tabbedPane.addTab( "Tab Two", panel2 );

    topPanel.add( tabbedPane, BorderLayout.CENTER );
    chooseBox.setSelectedIndex(-1);

    chooseBox.addActionListener(new ActionListener()
    {
        int selected;

        public void actionPerformed(ActionEvent e)
        {
       selected = chooseBox.getSelectedIndex();

       System.out.println("Made it");
       createPage1(selected);
       panel1.repaint(); //IS NOT REPAINTING, I HAVE ALSO ALREADY TRIED REVALIDATE()
       createPage2(selected);
       panel2.repaint(); //IS NOT REPAINTING
    }
    });
    }


public void createPage1(int selected)
    {

        panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(700, 650));
        String[] list = {"a", "b", "c"};

    JComboBox box = new JComboBox(list);

    switch(selected){
    case 0:
        box.setSelectedIndex(0);

    break;
    case 1:
        box.setSelectedIndex(1);
        break;
        case 2:
        box.setSelectedIndex(2);
        break;
        default:
            box.setSelectedIndex(0);
        break;
    }
    panel1.add(box);

}

     public void createPage2(int selected)
     {
    panel2 = new JPanel();
    panel1.setPreferredSize(new Dimension(700, 650));
    JRadioButton one = new JRadioButton("One");
    JRadioButton two = new JRadioButton("Two");
    ButtonGroup group = new ButtonGroup();
    group.add(one);
    group.add(two);
    switch(selected){
    case 0:
        one.setSelected(true);
        two.setSelected(false);
    break;
    case 1:
        one.setSelected(false);
        two.setSelected(true);
    break;
        default:
            one.setSelected(false);
        two.setSelected(false);
        break;
         }
    panel2.add(one);
    panel2.add(two);
}


public static void main( String args[] ) 
{
    // Create an instance of the test application
    Help mainFrame  = new Help();
    mainFrame.setVisible( true );
}
}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
Jayden
  • 71
  • 1
  • 6
  • What exactly are you expecting repaint to do?? Clear out all of the selections made to the radio buttons, and dropbox?? – Hunter McMillen Jun 20 '11 at 15:18
  • I want it to change what the default selected values of the combobox and JRadioButtons depending on which initial choice they make from the first drop down menu not located inside the tabs. – Jayden Jun 20 '11 at 15:25
  • The indentation in that source is very confusing. Please choose one of the two common forms of bracketing & indenting code blocks, & stick to it. – Andrew Thompson Jun 20 '11 at 15:26

1 Answers1

2

The GUI can be 'fixed' by calling JTabbedPane.removeAll() and adding the panels fresh, but you'd be better off changing those methods from creating new panels, to adjusting the values of the existing controls.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Scanner;
import java.util.*;
import java.io.*;

class Help extends JFrame
{
  private    JTabbedPane tabbedPane;
  private    JPanel panel1;
  private    JPanel panel2;

  public Help()
  {

     final JPanel topPanel = new JPanel();
     topPanel.setLayout( new BorderLayout() );
     getContentPane().add( topPanel );

     String[] choose = {"1", "2", "3"};

    final JComboBox chooseBox = new JComboBox(choose);

    JPanel topPanelHeader = new JPanel();
    topPanelHeader.setLayout(new BorderLayout());
    JPanel topPanelHeader2 = new JPanel();
    topPanelHeader2.setLayout(new BorderLayout());

    JButton submit = new JButton("Submit");
    JLabel chooseLabel = new JLabel("Choose one       ");
    JLabel blank = new JLabel("                                       ");


    chooseBox.setSelectedIndex(0);
    topPanelHeader2.add(chooseLabel, BorderLayout.WEST);
    topPanelHeader2.add(chooseBox, BorderLayout.CENTER);
    topPanelHeader2.add(blank, BorderLayout.EAST);
    topPanelHeader.add(submit, BorderLayout.EAST);
    topPanelHeader.add(topPanelHeader2, BorderLayout.WEST);
    topPanel.add(topPanelHeader, BorderLayout.NORTH);

    createPage1(-1);
    createPage2(-1);

    // Create a tabbed pane
    tabbedPane = new JTabbedPane();
    tabbedPane.addTab( "Tab One", panel1 );
    tabbedPane.addTab( "Tab Two", panel2 );

    topPanel.add( tabbedPane, BorderLayout.CENTER );
    chooseBox.setSelectedIndex(-1);

    chooseBox.addActionListener(new ActionListener()
    {
        int selected;

        public void actionPerformed(ActionEvent e)
        {
       selected = chooseBox.getSelectedIndex();

       System.out.println("Made it");
       createPage1(selected);
       panel1.repaint(); //IS NOT REPAINTING, I HAVE ALSO ALREADY TRIED REVALIDATE()
       createPage2(selected);
       panel2.repaint(); //IS NOT REPAINTING

    tabbedPane.removeAll();
    tabbedPane.addTab( "Tab One", panel1 );
    tabbedPane.addTab( "Tab Two", panel2 );
    }
    });

    pack();
    }


public void createPage1(int selected)
    {
System.out.println("createPage1");
        panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(700, 650));
        String[] list = {"a", "b", "c"};

    JComboBox box = new JComboBox(list);

    switch(selected){
    case 0:
        box.setSelectedIndex(0);

    break;
    case 1:
        box.setSelectedIndex(1);
        break;
        case 2:
        box.setSelectedIndex(2);
        break;
        default:
            box.setSelectedIndex(0);
        break;
    }
    panel1.add(box);

}

     public void createPage2(int selected)
     {
System.out.println("createPage2");
    panel2 = new JPanel();
    panel1.setPreferredSize(new Dimension(700, 650));
    JRadioButton one = new JRadioButton("One");
    JRadioButton two = new JRadioButton("Two");
    ButtonGroup group = new ButtonGroup();
    group.add(one);
    group.add(two);
    switch(selected){
    case 0:
        one.setSelected(true);
        two.setSelected(false);
    break;
    case 1:
        one.setSelected(false);
        two.setSelected(true);
    break;
        default:
            one.setSelected(false);
        two.setSelected(false);
        break;
         }
    panel2.add(one);
    panel2.add(two);
}


public static void main( String args[] )
{
    // Create an instance of the test application
    Help mainFrame  = new Help();
    mainFrame.setVisible( true );
}
}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433