Domanda

public class JFrameWithPanel extends JFrame implements ActionListener, ItemListener
{
    int packageIndex;
    double price;
    double[] prices = {49.99, 39.99, 34.99, 99.99};

    DecimalFormat money = new DecimalFormat("$0.00");
    JLabel priceLabel = new JLabel("Total Price: "+price);
    JButton button = new JButton("Check Price");
    JComboBox packageChoice = new JComboBox();
    JPanel pane = new JPanel();
    TextField text = new TextField(5);
    JButton accept = new JButton("Accept");
    JButton decline = new JButton("Decline");
    JCheckBox serviceTerms = new JCheckBox("I Agree to the Terms of Service.", false);
    JTextArea termsOfService = new JTextArea("This is a text area", 5, 10);

    public JFrameWithPanel()
    {
        super("JFrame with Panel");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pane.add(packageChoice);
        setContentPane(pane);
        setSize(250,250);
        setVisible(true);

        packageChoice.addItem("A+ Certification");
        packageChoice.addItem("Network+ Certification ");
        packageChoice.addItem("Security+ Certifictation");
        packageChoice.addItem("CIT Full Test Package");

        pane.add(button);
        button.addActionListener(this);

        pane.add(text);
        text.setEditable(false);
        text.setBackground(Color.WHITE);
        text.addActionListener(this);

        pane.add(termsOfService);
        termsOfService.setEditable(false);
        termsOfService.setBackground(Color.lightGray);

        pane.add(serviceTerms);
        serviceTerms.addItemListener(this);

        pane.add(accept);
        accept.addActionListener(this);

        pane.add(decline);
        decline.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        packageIndex = packageChoice.getSelectedIndex();
        price = prices[packageIndex];
        text.setText("$"+price);

        Object source = e.getSource();

        if(source == accept)
        {
            if(serviceTerms.isSelected() == false)
            {
                JOptionPane.showMessageDialog(null,"Please accept the terms of service.", "Terms of Service", JOptionPane.ERROR_MESSAGE);
            }
            else
            {
                JOptionPane.showMessageDialog(null,"Thank you. We will now move on to registering your product.");
                pane.dispose();
            }
        }
        else if(source == decline)
        {
            System.exit(0);
        }
    }

    public void itemStateChanged(ItemEvent e)
    {
        int select = e.getStateChange();
    }

    public static void main(String[] args)
    {
        String value1;
        int constant = 1, invalidNum = 0, answerParse, packNum, packPrice;

        JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program.");

        JOptionPane.showMessageDialog(null,"IT WORKS!");
    }



}//class

Come faccio ad avere questa cornice al vicino in modo che il mio messaggio JOptionPane finestre di dialogo può continuare nel programma senza di me uscire completamente il programma.

EDIT: ho provato .Dispose (), ma ottengo questo:

cannot find symbol
symbol  : method dispose()
location: class javax.swing.JPanel
                pane.dispose();
                    ^
È stato utile?

Soluzione

Prova:. this.dispose() invece

JPanel non ha questo metodo, ma JFrame fa

modifica

Nel vostro principale non stai chiamando il telaio:

public static void main(String[] args)  {
    String value1;
    int constant = 1, invalidNum = 0, answerParse, packNum, packPrice;

    JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program.");

    JOptionPane.showMessageDialog(null,"IT WORKS!");
    }

Prova ad aggiungere e vedere la differenza:

public static void main(String[] args)  {
    String value1;
    int constant = 1, invalidNum = 0, answerParse, packNum, packPrice;

    JOptionPane.showMessageDialog(null,"Hello!"+"\nWelcome to the CIT Test Program.");

    JOptionPane.showMessageDialog(null,"IT WORKS!");
    new JFrameWithPanel(); //<-- creating a JFrameWithPanel
}

Anche nell'azione metodo, si sta mostrando la finestra di dialogo e poi smaltire, probabilmente si vuole fare il contrario eseguita.

if(serviceTerms.isSelected() == false) {
    JOptionPane.showMessageDialog(null,"Please accept the terms of service.", "Terms of Service", JOptionPane.ERROR_MESSAGE);
} else {
    this.dispose();
    JOptionPane.showMessageDialog(null,"Thank you. We will now move on to registering your product.");
}

Risultato in:

main

seguito da

risultato

modifica 2

Prova il seguente codice, dovrebbe mostrare una cornice, e quando si fa clic sul pulsante "Chiudi" dovrebbe mostrare una finestra di dialogo, è che quello che stai cercando?

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

class FrameDemo {
    public static void main( String [] args ) {
        final JFrame frame = new JFrame("Main frame");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.add( new JPanel(){{
            add( new JLabel("This is the main content"));
            add( new JButton("Close"){{
                addActionListener( new ActionListener(){
                    public void actionPerformed(ActionEvent e ) {
                        frame.dispose();
                        JOptionPane.showMessageDialog(frame,"IT WORKS!");

                    }
                });
            }});
        }});
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );

    }
}

Altri suggerimenti

So che questo potrebbe essere una risposta stupida, ma a volte il più evidente cosa è causano problemi. Non ti ho visto importare javax.swing nel codice ... Sei stato tu?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top