не могу закрыть предыдущий кадр, чтобы хорошо видеть новый кадр Java - PullRequest
1 голос
/ 21 марта 2012

У меня проблема с кадрами. Я думаю, что моя проблема логическая. Я открываю фрейм меню, а затем, когда нажимаю добавить пассажира, рама не открывается. Я до сих пор вижу предыдущий кадр. Я использовал идеи, опубликованные на этом форуме, чтобы изменить setVisisble на (false), и я думал, что правильно увижу другой фрейм, но он не сработал. Не могли бы вы дать мне несколько советов. Спасибо

public class DriverProgram 
{ 
     public static void main (String [ ] argument) 
      { 
          Flight sw101 = new Flight(); 
          sw101.setVisible(true);
      } 
 } 

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

public class Flight extends JFrame
{
SeatingChart sc = new SeatingChart();
WaitingList wl = new WaitingList();
private String buttons[] = new String[5];
private final Font MENU_FONT = new Font("Serif", Font.BOLD, 20);
JButton b;
ActionListener listener1 = new MenuClickListener();
private JTextField input =null;  
private JTextField firstName;
private JTextField middleName;
private JTextField lastName; 
private final Font NEW_FONT = new Font("Serif", Font.BOLD + Font.ITALIC, 20);

public Flight()
{
    menu();
}

void menu( )
{ 
    uiFrameMenu();
    addPanelMenu();
}

void uiFrameMenu()
{
    setTitle( "MENU" );
    setSize( 400, 400 );
    setLocationRelativeTo( null );
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   
}

void addPanelMenu()
{
    setLayout( new BorderLayout() ); 
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout (5,1));

    buttons[0] = "Add Passenger";
    buttons[1] = "Remove Passenger";
    buttons[2] = "Seating Chart";
    buttons[3] = "Waiting List";
    buttons[4] = "Exit";


    for( int i = 0; i < buttons.length ; i++ )
    {
        b = new JButton( buttons[i]);
        b.setText( buttons[i] );
        b.setForeground(Color.BLACK);
        b.setFont(MENU_FONT);
        b.addActionListener(listener1);
        panel.add(b);
    }

    getContentPane();
    panel.setBackground(Color.MAGENTA);
    add(panel,"Center");
}

class MenuClickListener implements ActionListener
{
    MenuClickListener() { }

    @Override
    public void actionPerformed( ActionEvent event ) 
    {   
        if ( event.getActionCommand().equals(buttons[0]))   
        { 
            addPassenger();
        }
        else if ( event.getActionCommand().equals(buttons[1]))  
        { 

        }
        setVisible(true);
             }
}



void addPassenger( )
{
    this.setEnabled(false);
    uiFrameData();
    setLayout( new BorderLayout() ); 
    JPanel panel1 = new JPanel();
    panel1.setLayout( new GridLayout(3, 2) );
    JPanel panel2 = new JPanel();
    panel2.setLayout( new GridLayout(3, 1) );
    JLabel l1 = new JLabel("First Name");
    JLabel l2 = new JLabel("Middle Name");
    JLabel l3 = new JLabel("Last Name");
    firstName = new JTextField();
    middleName = new JTextField();
    lastName = new JTextField();
    panel1.add(l1);
    panel1.add(firstName);
    panel1.add(l2);
    panel1.add(middleName);
    panel1.add(l3);
    panel1.add(lastName);
    add(panel1);
}

void uiFrameData()
{
    setTitle( "FIRST, MIDDLE AND LAST NAME" );
    setSize( 400, 400 );
    //setLocationRelativeTo( null );
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   
}
}

1 Ответ

3 голосов
/ 21 марта 2012

Лучше применить CardLayout , для этого сценария, как вам уже сказали.Здесь я изменил ваш код, вы устанавливаете Layout на вашем JFrame каждый раз, так как это тот же Layout, который вы устанавливаете, почему бы не сделать это только один раз.Зачем добавлять лишний код каждый раз без всяких причин :-), Делайте revalidate() и repaint() на вашем JFrame после внесения изменений в графический интерфейс на лету, чтобы они могли отвечать взаимностью зрителю.Здесь я внес некоторые изменения в код.

//import corejava.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DriverProgram 
{ 
     public static void main (String [ ] argument) 
      { 
          SwingUtilities.invokeLater(new Runnable()
          {
                public void run()
                {
                    Flight sw101 = new Flight(); 
                    sw101.setVisible(true);
                }
          });
      } 
 }

class Flight extends JFrame
{
    //SeatingChart sc = new SeatingChart();
    //WaitingList wl = new WaitingList();
    private String buttons[] = new String[5];
    private final Font MENU_FONT = new Font("Serif", Font.BOLD, 20);
    JButton b;
    ActionListener listener1 = new MenuClickListener();
    private JPanel panel; // changed this to instance field so it can be accessed, at button click.
    private JTextField input =null;  
    private JTextField firstName;
    private JTextField middleName;
    private JTextField lastName; 
    private final Font NEW_FONT = new Font("Serif", Font.BOLD + Font.ITALIC, 20);

    public Flight()
    {
        menu();
    }

    void menu( )
    { 
        uiFrameMenu();
        addPanelMenu();
    }

    void uiFrameMenu()
    {
        setTitle( "MENU" );
        setSize( 400, 400 );
        setLocationRelativeTo( null );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );   
    }

    void addPanelMenu()
    {
        setLayout( new BorderLayout() ); 
        panel = new JPanel();
        panel.setLayout(new GridLayout (5,1));

        buttons[0] = "Add Passenger";
        buttons[1] = "Remove Passenger";
        buttons[2] = "Seating Chart";
        buttons[3] = "Waiting List";
        buttons[4] = "Exit";


        for( int i = 0; i < buttons.length ; i++ )
        {
            b = new JButton( buttons[i]);
            b.setText( buttons[i] );
            b.setForeground(Color.BLACK);
            b.setFont(MENU_FONT);
            b.addActionListener(listener1);
            panel.add(b);
        }

        getContentPane();
        panel.setBackground(Color.MAGENTA);
        add(panel,"Center");
    }

    class MenuClickListener implements ActionListener
    {
        MenuClickListener() { }

        @Override
        public void actionPerformed( ActionEvent event ) 
        {   
            if ( event.getActionCommand().equals(buttons[0]))   
            { 
                addPassenger();
            }
            else if ( event.getActionCommand().equals(buttons[1]))  
            { 

            }       
        }
    }



    void addPassenger( )
    {
        //this.setEnabled(false);
        remove(panel);
        uiFrameData();
        JPanel panel1 = new JPanel();
        panel1.setLayout( new GridLayout(3, 2) );
        JPanel panel2 = new JPanel();
        panel2.setLayout( new GridLayout(3, 1) );
        JLabel l1 = new JLabel("First Name");
        JLabel l2 = new JLabel("Middle Name");
        JLabel l3 = new JLabel("Last Name");
        firstName = new JTextField();
        middleName = new JTextField();
        lastName = new JTextField();
        panel1.add(l1);
        panel1.add(firstName);
        panel1.add(l2);
        panel1.add(middleName);
        panel1.add(l3);
        panel1.add(lastName);
        add(panel1);

        revalidate(); // If your JDK is 1.7 else use getContentPane().revalidate(); for JDK 1.6 or below
        repaint();
    }

    void uiFrameData()
    {
        setTitle( "FIRST, MIDDLE AND LAST NAME" );
        setSize( 400, 400 ); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...