Lukning af GUI vindue, hvor vinduet popper op igen.
hejhar lidt problemer med at fange en close operation i min subklasse som arver fra en superklasse som jeg bruger til al min GUI.
Når jeg klikker på enten "cancel" knappen eller den indbyggede luk knap "krydset" i toppen af vinduet, så lukker vinduet og popper op igen. Dette kan gentage sig op til flere gange, hvor den så til sidst forbliver lukket. I kan se min sub klasse herunder samt min super klasse i bunden.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import dk.Request;
import dk.ModalContainer;
import dk.AddressArchive;
import dk.CustomerPerson;
public class PopupChooseCustomer extends ModalContainer {
protected static CustomerTableModel popupTableModel;
protected static PopupCustomerTable popupTable;
protected void newData(Request r) {
try { popupTableModel.fetchData(r); }
catch(Exception e) {
e.printStackTrace();
// ¤ Mangler pæn fejlhåndtering
}
popupTable.resetSizes();
popupTable.clearSelection();
popupTable.scrollRectToVisible(new Rectangle(0, 0, 0, 0));
}
public PopupChooseCustomer(JFrame f){
super(f, null, EvikaliSMS.language.getValue("C_CREATE_PANEL_TITLE"), EvikaliSMS.language.getValue("OK"), EvikaliSMS.language.getValue("CANCEL"));
popupTableModel = new CustomerTableModel();
popupTable = new PopupCustomerTable(popupTableModel);
newData(new Request(AddressArchive.AddressArchive_CLASS,AddressArchive.GETCUSTOMER)); // Make default search
popupTable.selectFirst();
JScrollPane sp = new JScrollPane();
sp.getViewport().setView(popupTable);
getContentPane().add(sp, BorderLayout.CENTER);
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
Dimension dsize = getPreferredSize();
setLocation((size.width - dsize.width) / 2, (size.height - dsize.height) / 2);
setSize(new Dimension(480, 235));
pack();
}
public boolean okActivated() {return true;}
public boolean cancelActivated() {return true;}
}
---------------------------super klasse---------------------
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ModalContainer extends JDialog {
private JButton close;
private JButton cancel;
public ModalContainer(JFrame f, JComponent jc, String title) {
this(f, jc, title, "OK", null);
}
public ModalContainer(JFrame f, JComponent jc, String title, String okStr, String cancelStr) {
super(f, true);
setResizable(false);
setTitle(title);
getContentPane().setLayout(new BorderLayout(0,0));
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel buttonPane = new JPanel(new FlowLayout());
close = new JButton(okStr);
buttonPane.add(close);
if (cancelStr != null) {
cancel = new JButton(cancelStr);
buttonPane.add(cancel);
}
getContentPane().add(buttonPane, BorderLayout.SOUTH);
close.addActionListener (
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (okActivated())setVisible(false);
}
}
);
if (cancelStr != null) {
cancel.addActionListener (
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (cancelActivated())setVisible(false);
}
}
);
}
if (jc != null) setComponent(jc);
getRootPane().setDefaultButton(close);
}
public void setComponent(JComponent jc) {
getContentPane().add(jc, BorderLayout.CENTER);
pack();
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
Dimension dsize = getSize();
setLocation((size.width - dsize.width)/2, (size.height - dsize.height)/2);
setVisible(true);
}
public boolean okActivated() { return true; }
public boolean cancelActivated() { return true; }
}
