Zamykanie okna w Swingu

0

mam taki problem mam główne okno programu w którym mogę włączyć programy które się otwierają w kolejnych oknach. jak wyłączam program w który otworzył się w kolejnym okienku przez naciśnięcie x to wyłącza mi się też główny program. pomożecie ?

0

Pomożemy. W tych kolejnych oknach zamień

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//na
 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Lepszym rozwiązaniem jest otwieranie programów w oknach typu JDialog, a nie JFrame.

0

kurcze nie mam tego w tych oknach
przykład kodu z okna:

import com.sun.java.accessibility.util.SwingEventMonitor;
import static com.sun.java.accessibility.util.SwingEventMonitor.addChangeListener;
import static java.lang.Double.parseDouble;
import javafx.collections.SetChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Temperatura extends javax.swing.JFrame {

   
    public Temperatura() {
        initComponents();
        
    }

  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        jScrollBar1 = new javax.swing.JScrollBar();
        jSlider2 = new javax.swing.JSlider();
        jSlider1 = new javax.swing.JSlider();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jSlider2.setMajorTickSpacing(30);
        jSlider2.setMaximum(373);
        jSlider2.setMinorTickSpacing(5);
        jSlider2.setPaintLabels(true);
        jSlider2.setPaintTicks(true);
        jSlider2.setValue(0);
        jSlider2.setEnabled(false);

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSlider2, org.jdesktop.beansbinding.ELProperty.create("10"), jSlider2, org.jdesktop.beansbinding.BeanProperty.create("majorTickSpacing"));
        bindingGroup.addBinding(binding);

        jSlider2.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jSlider2StateChanged(evt);
            }
        });

        jSlider1.setMajorTickSpacing(20);
        jSlider1.setMinimum(-273);
        jSlider1.setMinorTickSpacing(5);
        jSlider1.setPaintLabels(true);
        jSlider1.setPaintTicks(true);
        jSlider1.setToolTipText("");

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSlider1, org.jdesktop.beansbinding.ELProperty.create("30"), jSlider1, org.jdesktop.beansbinding.BeanProperty.create("majorTickSpacing"));
        bindingGroup.addBinding(binding);

        jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jSlider1StateChanged(evt);
            }
        });

        jLabel1.setText("Celsjusz:");

        jLabel2.setText("Kelwin:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(23, 23, 23)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jSlider2, javax.swing.GroupLayout.DEFAULT_SIZE, 688, Short.MAX_VALUE)
                            .addComponent(jSlider1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(87, 87, 87)
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(93, 93, 93)
                        .addComponent(jLabel2)))
                .addContainerGap(43, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addGap(16, 16, 16)
                .addComponent(jSlider2, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(50, Short.MAX_VALUE))
        );

        bindingGroup.bind();

        pack();
    }// </editor-fold>                        

    private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
        double tempC = jSlider1.getValue();
        jLabel1.setText("Celsjusz: " + tempC);
   double tempF = tempC + 273;
   jLabel2.setText("Fahrenheit: " + tempF);
   jSlider2.setValue((int) tempF);
    }                                     

    private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {                                      
        // TODO add your handling code here:
    }                                     

    public static void main(String args[]) {
       

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Temperatura().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollBar jScrollBar1;
    private javax.swing.JSlider jSlider1;
    private javax.swing.JSlider jSlider2;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration                   

}
0

??? A co to jest

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

Kod umieszczaj w znacznikach "kolorujących", użyj ostatniego przycisku po prawej na pasku narzędzi.

0

jak dobrze rozumiem, wstawiam ten kod po prawej stronie w zakładce events, windows closing ?
bo tak wstawiłem w dwóch kolejnych oknach i jedno nie zamyka głównego okna, czyli działa poprawnie, ale drugie już okno zamyka też główne okno:(

0

Nie znam designera z NetBeans. Nie kombinuj z zakładkami, tylko zamień słowo EXIT na DISPOSE.

0

no ok z checią zmienię, ale nie mam tego słowa nigdzie w tym swingu ani w kodzie to gdzieś jest zaszyte ale nie wiem gdzie

0

ok juz sobie poradzilem, dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1