PDA

Visualizza la versione completa : [JAVA] Chiudere finestra con JButton passando per Ascoltatore


zannas
08-12-2005, 12:03
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import pack.*;

class Area_by_Gauss_w extends JFrame {

private int numero_vertici;
private Double area;
final String descrizione = "<HTML>Con questo piccolo programma si sarà in grado di calcolare l'area di un qualsiasi poligono avendo tutte le coordinate
dei suoi punti rispetto a un generico piano cartesiano.
NB= L'unità di misura del risultato sarà come quella inserita e ovviamente elevata alla seconda.</HTML>";
private JTextField Est;
private JTextField Nord;
private int n;
private Poligono figura;
private JFrame p_ins;

public static void main(String args[]){
Area_by_Gauss_w risultato = new Area_by_Gauss_w();
}

public Area_by_Gauss_w(){
super("Area di Gauss");

JOptionPane.showMessageDialog(null, this.descrizione, "Descrizione Programma", JOptionPane.INFORMATION_MESSAGE);

this.setNVertici();
Poligono figura = new Poligono(this.numero_vertici);

JOptionPane.showMessageDialog(null, "Bene ora inserisci i valori delle coordinate di tutti i punti", "Info", JOptionPane.INFORMATION_MESSAGE);
//
for(int n = 0; n < figura.getNumeroVertici(); n++) {
p_ins = new JFrame("Inserisci le coordinate del punto "+n);
p_ins.setDefaultCloseOperation(WindowConstants.DO_ NOTHING_ON_CLOSE);

GridLayout Layout_input = new GridLayout(5,1);

JDialog input = new JDialog(p_ins, p_ins.getTitle(), true);
input.setLayout(Layout_input);
input.add(new JLabel("Inserisci prima la Coordinata Est (X) e poi Nord (Y) del punto "+n+":"));
Est = new JTextField("0.00");
Nord = new JTextField("0.00");

JButton Reimposta = new JButton("Reimposta");
Reimposta.addActionListener(new Reset());

JButton Inserisci = new JButton("Inserisci!");
Inserisci.addActionListener(new Inserisci());
input.add(Est);
input.add(Nord);
input.add(Inserisci);
input.add(Reimposta);

input.pack();
input.setVisible(true);
}
figura.setArea_by_Gauss();
BorderLayout Layout1 = new BorderLayout();
super.setLayout(Layout1);
super.add(new JLabel(this.descrizione), BorderLayout.NORTH);
super.add(new JLabel("Area della Figura: "+figura.getArea()), BorderLayout.CENTER);
super.pack();
super.setVisible(true);
}

public void setNVertici() {
this.numero_vertici = leggiNumero_Integer_from_JOptionPane();
//controllo
if (this.numero_vertici < 3) {
//System.out.println("Una figura ha almeno 3 vertici e corrisponde a un triangolo..reinserisci il numero di vertici!");
setNVertici();
}
}

private int leggiNumero_Integer_from_JOptionPane(){
while(true){
try {
String valore = JOptionPane.showInputDialog("Inserire per cortesia il numero di vertici della Figura.");
return Integer.parseInt(valore);
} catch (NumberFormatException exc){
JOptionPane.showMessageDialog(null, "Il valore inserito non è un numero. Per cortesia riprova", "Errore", JOptionPane.ERROR_MESSAGE);
}
}
}

private Double leggiDouble_from_String(String s) {
while(true) {
try{
Double n = Double.parseDouble(s);
return n;
} catch (NumberFormatException exc) {
JOptionPane.showMessageDialog(null, "Il valore inserito non è un numero. Per cortesia riprova", "Errore", JOptionPane.ERROR_MESSAGE);
}
}
}

//Ascoltatori
private class Reset implements ActionListener {
public void actionPerformed(ActionEvent e) {
Est.setText("0.00");
Nord.setText("0.00");
}
}

private class Inserisci implements ActionListener {
public void actionPerformed(ActionEvent e) {
figura.setCoordinateVertice(n,leggiDouble_from_Str ing(Est.getText()),leggiDouble_from_String(Nord.ge tText()));
//new WindowEvent(p_ins,WindowEvent.WINDOW_CLOSED); (non funz)
//new WindowEvent(p_ins,202); (non funz)
//JFrame.EXIT_ON_CLOSE; (non funz)
//p_ins.setVisible(false); (non funz)
}
}

}
come far funzionare questo codice???? in particolar modo: vedere il risultato e chiudere una finestra e inserire i dati una volta cliccato il Bottone "Inserisci" con l'ascoltatore Inserisci

Matteo982
08-12-2005, 12:30
Con qualche informazione in più tipo che problemi da adesso e sul contesto forse si riesce a risolvere meglio e senza mettergi 3 ore per capire tutto dal codice! :zizi:

Illuminaci! :unz:

Ciao. :ciauz:

zannas
09-12-2005, 01:40
praticamente vorrei che quando io clicco sul Bottone "Inserisci" inserisse i valori presi dalle JTextField, e chiudesse la finestra aperta. Come faccio a chiudere la finestra da un bottone?? Inoltre...come faccio a verificare che il testo inserito nelle 2 JTextField siano numeri?

unomichisiada
09-12-2005, 02:05
Originariamente inviato da zannas
praticamente vorrei che quando io clicco sul Bottone "Inserisci" inserisse i valori presi dalle JTextField, e chiudesse la finestra aperta. Come faccio a chiudere la finestra da un bottone?? Inoltre...come faccio a verificare che il testo inserito nelle 2 JTextField siano numeri?
Per il primo problema ti basta chiamare dispose() su un riferimento alla finestra da chiudere .
Per il secondo problema hai due soluzioni:
1)quella che io preferisco fai in modo di filtrare preventivamente l'input in modo da impedire proprio l'inserimento di NON numeri. Questo si fa in maniera analoga a quanto abbiamo già visto in un'altra discussione (ora non ho il link) cerca OnlyNumberTextField nel motore del forum e dovresti trovarla.
2)Puoi fare un controllo a posteriori sull'input facendo un parseDouble sulla stringa ottenuta.Vediti la documentazione in proposito.

zannas
09-12-2005, 02:29
il primo non mi funziona..ho inserito nell'ascoltatore Inserisci : p_ins.dispose(); ma non succede nulla..è come se non fosse cambiato nulla...


private class Inserisci implements ActionListener {
public void actionPerformed(ActionEvent e) {
figura.setCoordinateVertice(n,Double.parseDouble(E st.getText()),Double.parseDouble(Nord.getText()));

p_ins.dispose();
}
}

unomichisiada
09-12-2005, 02:49
Originariamente inviato da zannas
il primo non mi funziona..ho inserito nell'ascoltatore Inserisci : p_ins.dispose(); ma non succede nulla..è come se non fosse cambiato nulla...


private class Inserisci implements ActionListener {
public void actionPerformed(ActionEvent e) {
figura.setCoordinateVertice(n,Double.parseDouble(E st.getText()),Double.parseDouble(Nord.getText()));

p_ins.dispose();
}
}
Hai ragione funziona solo con la finestra principale dispose(), devi usare setVisible(false);

unomichisiada
09-12-2005, 02:49
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;


public class NonEditableTable extends JTextField implements ActionListener
{
private static final long serialVersionUID = 8554350982699149972L;
private JButton butClose;
private JButton butOpen;
private JFrame frame2;
private JFrame frame;
/**
* @param args
*/
public static void main(String[] args)
{
new NonEditableTable();
}
public NonEditableTable()
{
frame = new JFrame();
frame .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.getContentPane().setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane();
String[][] data = new String[][]{{"dato1","dato2","dato3","dato4"},
{"dato1","dato2","dato3","dato4"},
{"dato1","dato2","dato3","dato4"}};
String[] columnNames = new String[]{"Col1","Col2","Col3","Col4"};
JTable table = new JTable();
scrollPane.getViewport().add(table);

DefaultTableModel model = new DefaultTableModel()
{

/**
*
*/
private static final long serialVersionUID = 1L;

public boolean isCellEditable(int row, int column)
{
return false;
}

};
model.setDataVector(data,columnNames);
table.setModel(model);
frame.getContentPane().add(scrollPane);

frame2 = new JFrame();
butClose = new JButton("Chiudi");
butOpen = new JButton("Apri");
butClose.addActionListener(this);
butOpen.addActionListener(this);
frame.getContentPane().add(butClose);
frame.getContentPane().add(butOpen);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == butClose)
frame2.setVisible(false);
else if (e.getSource() == butOpen)
frame2.setVisible(true);

}

}

zannas
09-12-2005, 03:17
dato che non ho capito niente e non riesco a sbloccarmi vi metto direttamente lo ZIP così capite cosa voglio effettivamente fare e così riuscite ad aiutarmi

http://lnx.virusarts.net/zannasweb/Area_by_Gauss_w.zip

Matteo982
09-12-2005, 10:39
Semplicemente per chiudere la finestra basta fare così:

private class Inserisci implements ActionListener {
public void actionPerformed(ActionEvent e) {
figura.setCoordinateVertice(n,Double.parseDouble(E st.getText()),Double.parseDouble(Nord.getText()));

p_ins.setVisible(false);
}
}

Per quanto riguarda la storia di inserire solo numeri come ha detto unomichisiada guardati questo post.

http://forum.html.it/forum/showthread.php?s=&threadid=872698&highlight=Java+textfield

Ciao. :ciauz:

unomichisiada
09-12-2005, 12:30
Originariamente inviato da Matteo982
Semplicemente per chiudere la finestra basta fare così:

private class Inserisci implements ActionListener {
public void actionPerformed(ActionEvent e) {
figura.setCoordinateVertice(n,Double.parseDouble(E st.getText()),Double.parseDouble(Nord.getText()));

p_ins.setVisible(false);
}
}

Per quanto riguarda la storia di inserire solo numeri come ha detto unomichisiada guardati questo post.

http://forum.html.it/forum/showthread.php?s=&threadid=872698&highlight=Java+textfield

Ciao. :ciauz:
Bravo, quella discussione non riuscivo più a trovarala nemmeno io.Per il setVisible hai già risposto tu.

Loading