Reputation: 20755
Below is my code.
It displays one table containing all daily sells, 3 buttons (next, previous, print). When we press next button date advances and next day sell will display in another window. Now here is the main problem - I want that when new window will open the first window should be closed. Can someone help me sort out this problem?
package shop;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.PrinterException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import shop.DBEngine;
public class AllCashTable extends JFrame implements ActionListener{
private static String name;
private Vector<Vector<String>> data;
private Vector<Vector<String>> data1;
private Vector<String> header;
private Vector<String> header1;
JButton next,previous,print;
int a=0,d=0,y=0,m=0;
JTable table;
private JPanel mainPanel = new JPanel();
private String date,month,year;
String gt;
private String newdate;
private static JFrame frame,frame1,frame2;
public AllCashTable(String name) throws Exception{
DBEngine dbengine = new DBEngine();
data = dbengine.getDailySellAdd(name);
header = new Vector<String>();
header.add("Date");
header.add("Cash");
next=new JButton("Next");
previous=new JButton("Previous");
print=new JButton("Print");
table = new JTable(data, header);
table.setRowHeight(40);
table.setSelectionBackground(Color.YELLOW);
JPanel viewPanel = new JPanel();
viewPanel.setLayout(new BorderLayout());
viewPanel.add(table,BorderLayout.CENTER);
JScrollPane scroll = new JScrollPane(viewPanel);
scroll.setColumnHeaderView(table.getTableHeader());
mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEtchedBorder());
mainPanel.add(scroll,BorderLayout.CENTER);
for(int i=0;i<table.getRowCount();i++){
a=a+Integer.parseInt(data.get(i).get(1));
}
gt=Integer.toString(a);
header1 = new Vector<String>();
header1.add("Total");
header1.add(gt);
data.setSize(table.getRowCount()+1);
data.set(table.getRowCount()-1, header1);
JLabel jlab=new JLabel("Total:");
String gt=Integer.toString(a);
JLabel jlab3=new JLabel(gt);
JLabel jlab4=new JLabel(" ");
JPanel viewPanel2=new JPanel();
viewPanel2.add(jlab);
viewPanel2.add(jlab3);
viewPanel2.add(jlab4);
viewPanel2.add(previous);
viewPanel2.add(next);
viewPanel2.add(print);
previous.addActionListener(this);
print.addActionListener(this);
next.addActionListener(this);
mainPanel.add(viewPanel2,BorderLayout.PAGE_END);
}
public JPanel getMainPanel(){
return mainPanel;
}
private static void createAndShowUI() throws Exception{
frame = new JFrame("Cash Memo");
frame.getContentPane().add(new AllCashTable(name).getMainPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(330,400);
//frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
//frame.setVisible(false);
}
public static void main(String[] args){
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
try {
createAndShowUI();
} catch (Exception ex) {
Logger.getLogger(AllCashTable.class.getName()).log(Level.SEVERE,null,ex);
}
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==next){
date=data.get(0).get(0);
String m[]={"01","02","03","04","05","06","07","08","09","10","11","12"};
Calendar cal=Calendar.getInstance();
date=date.substring(0, 2);
d=Integer.parseInt(date)+1;
newdate=(d+"/"+m[cal.get(Calendar.MONTH)]+"/"+cal.get(Calendar.YEAR));
frame1 = new JFrame("Cash Memo");
try {
frame1.getContentPane().add(new AllCashTable(newdate).getMainPanel());
} catch (Exception ex) {
Logger.getLogger(AllCashTable.class.getName()).log(Level.SEVERE, null, ex);
}
frame1.setSize(330,400);
//frame.pack();
frame1.setLocationRelativeTo(null);
frame1.setVisible(true);
frame.dispose();//here is error nullpointerexception
}if(e.getSource()==previous){
date=data.get(0).get(0);
String m[]={"01","02","03","04","05","06","07","08","09","10","11","12"};
Calendar cal=Calendar.getInstance();
date=date.substring(0, 2);
int ax=Integer.parseInt(date)-1;
System.out.println(ax);
newdate=(ax+"/"+m[cal.get(Calendar.MONTH)]+"/"+cal.get(Calendar.YEAR));
frame2 = new JFrame("Cash Memo");
try {
frame2.getContentPane().add(new AllCashTable(newdate).getMainPanel());
} catch (Exception ex) {
Logger.getLogger(AllCashTable.class.getName()).log(Level.SEVERE, null, ex);
}
//frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setSize(330,400);
//frame.pack();
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
//frame1.setVisible(false);
}if(e.getSource()==print){
try {
boolean complete = table.print();
if (complete) {
/* show a success message */
System.out.println("Printing Complete");
} else {
/*show a message indicating that printing was cancelled */
System.out.println("Not Printed");
}
} catch (PrinterException pe) {
/* Printing failed, report to the user */
System.out.println(pe);
}
}
}
}
Upvotes: 0
Views: 1043
Reputation: 10994
For closing your JFrame
use next code in your actionPerformed()
method:
frame.setVisible(false);
frame.dispose();
EDIT: Your error in next you also create a new frame in a new variable use next code it help use, also watch @MadProgrammer suggetion about multiple frames.
if (e.getSource() == next) {
date = data.get(0).get(0);
String m[] = { "01", "02", "03", "04", "05", "06", "07", "08",
"09", "10", "11", "12" };
Calendar cal = Calendar.getInstance();
date = date.substring(0, 2);
d=Integer.parseInt(date)+1;
newdate = (d + "/" + m[cal.get(Calendar.MONTH)] + "/" + cal
.get(Calendar.YEAR));
frame.dispose();// here is error nullpointerexception
frame.setVisible(false);
frame = new JFrame("Cash Memo");
try {
frame.getContentPane().add(new Form(newdate).getMainPanel());
} catch (Exception ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null,
ex);
}
frame.setSize(330, 400);
// frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Upvotes: 1
Reputation: 194
Do this:
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
Upvotes: 2