Avatar billede swaq Nybegynder
14. januar 2004 - 10:50 Der er 6 kommentarer og
1 løsning

lukning af vindue til nyt vindue andre parametre (threads)

Hejsa

Jeg har et vindue som viser x-antal JTextField's, derudover er der en knap og endnu et JTextField benævnt 'input'

Meningen er, at et tryk på knappen medfører at det eksisterende vindue dør og et laves med input's indhold som parameter til constructoren. Det nye vindue kommer således til at indeholde input-antal JTextField's samt knappen og input-feltet.

Mit problemer er, at følgende resulterer i en total lukning af programmet:
if(e.getSource() == knap){
    new Vindue(input.getText());
    System.exit(0);
}

Jeg er IKKE interesseret i blot at "hide" vinduet.

Min mistanke er, at jeg bør lave det i tråde - hvad syntes du? Er lidt rusten i Threads så et eksempel ville være nice!
Avatar billede arne_v Ekspert
14. januar 2004 - 10:57 #1
System.exit betuder luk programmet, så det er ikke overraskende.
Avatar billede arne_v Ekspert
14. januar 2004 - 10:58 #2
Har du prøvet at kalde dispose metoden ?
Avatar billede swaq Nybegynder
14. januar 2004 - 11:00 #3
nope, hvad gør den?
Avatar billede arne_v Ekspert
14. januar 2004 - 11:02 #4
public void dispose()
Releases all of the native screen resources used by this Window, its subcomponents, and all of its owned children. That is, the resources for these Components will be destroyed, any memory they consume will be returned to the OS, and they will be marked as undisplayable.
Avatar billede swaq Nybegynder
14. januar 2004 - 11:02 #5
Arne du er en .... øhh... sveske :O)

Det var lige det der manglede - der kan man bare se hvad der sker, når man ikke sætter sig ind i det allermest basale Java
:O)

Her er koden hvis nogen er interesseret...


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
* Created by IntelliJ IDEA.
* User: larsdyrelund
* Date: Jan 14, 2004
* Time: 8:33:15 AM
* To change this template use Options | File Templates.
*/
public class Uge3Opgave1 extends JFrame implements ActionListener{
    private int antalFelter;
    private JLabel label;
    private JTextField input;
    private JPanel north;
    private JButton beregn;
    private JButton submit;

    private JTextField [][] felt;

    private JLabel [] v_sum;    //vertikal del sum
    private JLabel [] h_sum;    //horisontal del sum
    private JLabel total;    //total sum

    private JPanel panel;

    private GridLayout grid;

    public Uge3Opgave1(int antalFelter){
        if(antalFelter == 0){
            this.antalFelter = 3;
        }
        else {
            this.antalFelter = antalFelter;
        }

        felt = new JTextField[antalFelter][antalFelter];
        v_sum = new JLabel[antalFelter];
        h_sum = new JLabel[antalFelter];

        //Generering af felter
        for(int i = 0; i < antalFelter; i++)
            for(int j = 0; j < antalFelter; j++){
                felt[i][j] = new JTextField(String.valueOf(i), 2);
                felt[i][j].addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent me){
                        JTextField temp = (JTextField)me.getSource();
                        temp.selectAll();
                    }
                });
            }
        for(int i = 0; i < (antalFelter); i++)
            v_sum[i] = new JLabel();
        for(int i = 0; i < (antalFelter); i++)
            h_sum[i] = new JLabel();

        total = new JLabel();

        north = new JPanel();
        label = new JLabel("Antal felter");
        input = new JTextField(String.valueOf(antalFelter),3);
        input.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent me){
                JTextField temp = (JTextField)me.getSource();
                temp.selectAll();
            }
        });
        submit = new JButton("Submit");
        submit.addActionListener(this);

        beregn = new JButton("Beregn");
        beregn.addActionListener(this);

        grid = new GridLayout((antalFelter+1), (antalFelter+1), 1, 1);
        panel = new JPanel(grid);
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout());
        panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

        setDefaultCloseOperation(3);

        //Klippe / Klister
        north.add(label);
        north.add(input);
        north.add(submit);

        for(int i = 0; i < antalFelter; i++){
            for(int j = 0; j < antalFelter; j++)
                panel.add(felt[i][j]);
            panel.add(h_sum[i]);
        }
        for(int i = 0; i < antalFelter; i++)
            panel.add(v_sum[i]);
        panel.add(total);

        cp.add(north, BorderLayout.NORTH);
        cp.add(panel, BorderLayout.CENTER);
        cp.add(beregn, BorderLayout.SOUTH);

        beregn(antalFelter);

        pack();
        show();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation((screenSize.width-this.getWidth())/2,(screenSize.height-this.getHeight())/2);
    }
    private void beregn(int antalFelter){
        //beregn horisontalt
        for(int i = 0; i < antalFelter; i++)
            h_sum[i].setText(String.valueOf(beregn(i, antalFelter, 1)));
        //beregn vertikalt
        for(int i = 0; i < antalFelter; i++)
            v_sum[i].setText(String.valueOf(beregn(i, antalFelter, 0)));

        total.setText(String.valueOf(beregnTotal(antalFelter)));
    }
    private int beregn(int pivot, int antalFelter, int orientation){
        //Orientation 1 = horisontalt, 0 = vertikalt

        int sum = 0;
        if(orientation == 1)
            for(int i = 0; i < antalFelter; i++)
                sum += Integer.parseInt(felt[pivot][i].getText());
        else if(orientation == 0)
            for(int i = 0; i < antalFelter; i++)
                sum += Integer.parseInt(felt[i][pivot].getText());
        return sum;
    }
    private int beregnTotal(int antalFelter){
        int total = 0;
        for(int i = 0; i < antalFelter; i++)
            total += Integer.parseInt(v_sum[i].getText());
        return total;
    }
    public void actionPerformed(ActionEvent e){
        Object event = e.getSource();
        if(event == beregn)
            beregn(antalFelter);
        else if(event == submit){
            int nytAntal = Integer.parseInt(input.getText());
            if(nytAntal == antalFelter)
                return;
            else {
                new Uge3Opgave1(nytAntal);
                dispose();
            }
        }

    }
    public static void main(String[] args) {
        new Uge3Opgave1(4);
    }
}
Avatar billede swaq Nybegynder
14. januar 2004 - 11:03 #6
Reply and you shall be rewarded!
Avatar billede arne_v Ekspert
14. januar 2004 - 11:04 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester