ورود

View Full Version : مبتدی: انتقال داده از jFrame به jPanel



JYasProgramer
یک شنبه 20 دی 1394, 15:45 عصر
سلام دوستان
دو کلاس به نام های 1 - TransClass و 2 - DriverClass دارم
میخام از کلاس 2 به 1 داده انتقال بدم کد به شکل زیره

public class TransportationClass extends JPanel implements ActionListener {

private JTable table;
private JButton btnData, btnClose, btnDisplay = new JButton("نمایش");;
private static JFrame frame;

private Insets insets = new Insets(5, 5, 5, 5);

private DefaultTableModel dtm;

private String[] columnNames = {"ردیف",
"نام و نام خانوادگی",
"شماره ملی",
"نام خودرو",
"نوع خودرو",
"شماره پلاک"};

private Object[][] data = {
};

private dlCarPersonDetail dlCarPersonDetail = new dlCarPersonDetail();

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
createAndShowGUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private static void createAndShowGUI() {
frame = new JFrame("حمل و نقل");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
// frame.setBounds(100, 100, 470, 300);
frame.add(new TransportationClass());
frame.pack();
frame.setVisible(true);
}

/**
* Create the frame.
*/
public TransportationClass() {

setLayout(new BorderLayout());

JPanel btnPane = new JPanel();

GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c;
btnPane.setLayout(gridbag);

btnClose = new JButton("خروج");
btnClose.addActionListener(this);
c = new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, insets, 0, 0);
btnPane.add(btnClose, c);

btnDisplay = new JButton("نمایش");
btnDisplay.addActionListener(this);
c = new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, insets, 0, 0);
btnPane.add(btnDisplay, c);

btnData = new JButton("حمل و نقل");
btnData.addActionListener(this);
c = new GridBagConstraints(2, 0, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, insets, 0, 0);
btnPane.add(btnData, c);

table = new JTable();

dtm = new DefaultTableModel(data, columnNames);

table.setModel(dtm);
table.setComponentOrientation(ComponentOrientation .RIGHT_TO_LEFT);

c = new GridBagConstraints(0, 2, 3, 1, 2.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, insets, 0, 0);

btnPane.add(table, c);

JScrollPane scrollPane = new JScrollPane(table);
c = new GridBagConstraints(0, 2, 3, 1, 2.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, insets, 0, 0);
btnPane.add(scrollPane, c);

add(btnPane, BorderLayout.LINE_START);
}

private String str;

public TransportationClass(String str) {
this.str = str;
btnDisplay.setText(str);
}

@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == btnData) {
DriverClass dc = new DriverClass();
dc.setVisible(true);
} else if (event.getSource() == btnDisplay) {
for (int i = 0; i < 1; i++) {
dtm.addRow(new Object[]{i, dlCarPersonDetail.getDlName(), dlCarPersonDetail.getDlSurname(), dlCarPersonDetail.getDlPersonID(),
dlCarPersonDetail.getDlCarName(), dlCarPersonDetail.getDlCarType(), dlCarPersonDetail.getDlCarNumber()});
}
} else {

}
}
}


کلاس 2



public class DriverClass extends JFrame implements ActionListener {

private JPanel contentPane;
private JTextField nameField;
private JTextField surNameField;
private JTextField personIdField;
private JComboBox carTypeBox;

private JTextField carNameField;
private JTextField carNumberField;

private dlCarPersonDetail dlCarPersonDetail;

/**
* Create the frame.
*/
public DriverClass() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 309, 301);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

dlCarPersonDetail = new dlCarPersonDetail();

JButton btnNewButton = new JButton("\u0630\u062E\u06CC\u0631\u0647");
btnNewButton.addActionListener(this);
btnNewButton.setBounds(10, 228, 89, 23);
contentPane.add(btnNewButton);

JLabel lblNewLabel = new JLabel("\u0646\u0627\u0645");
lblNewLabel.setBounds(220, 11, 46, 14);
contentPane.add(lblNewLabel);

JLabel lblNewLabel_1 = new JLabel("\u0646\u0627\u0645 \u062E\u0627\u0646\u0648\u0627\u062F\u06AF\u06CC");
lblNewLabel_1.setBounds(220, 42, 81, 14);
contentPane.add(lblNewLabel_1);

JLabel label = new JLabel("\u0634\u0645\u0627\u0631\u0647 \u0645\u0644\u06CC");
label.setBounds(220, 73, 81, 14);
contentPane.add(label);

nameField = new JTextField();
nameField.setBounds(10, 8, 169, 20);
nameField.setComponentOrientation(ComponentOrienta tion.RIGHT_TO_LEFT);
contentPane.add(nameField);
nameField.setColumns(10);

surNameField = new JTextField();
surNameField.setBounds(10, 39, 169, 20);
surNameField.setComponentOrientation(ComponentOrie ntation.RIGHT_TO_LEFT);
contentPane.add(surNameField);
surNameField.setColumns(10);

personIdField = new JTextField();
personIdField.setBounds(10, 70, 169, 20);

personIdField.setComponentOrientation(ComponentOri entation.RIGHT_TO_LEFT);
contentPane.add(personIdField);
personIdField.setColumns(10);

carNameField = new JTextField();
carNameField.setComponentOrientation(ComponentOrie ntation.RIGHT_TO_LEFT);
carNameField.setBounds(10, 128, 169, 20);
contentPane.add(carNameField);
carNameField.setColumns(10);

carNumberField = new JTextField();
carNumberField.setComponentOrientation(ComponentOr ientation.RIGHT_TO_LEFT);
carNumberField.setBounds(10, 190, 169, 20);
contentPane.add(carNumberField);
carNumberField.setColumns(10);

carTypeBox = new JComboBox();
carTypeBox.addItem("\u0628\u0627\u0631\u06CC");
carTypeBox.addItem("\u0633\u0648\u0627\u0631\u06CC");
carTypeBox.setBounds(10, 159, 169, 20);
contentPane.add(carTypeBox);

JLabel label_1 = new JLabel("\u0646\u0627\u0645 \u0645\u0627\u0634\u06CC\u0646");
label_1.setBounds(220, 131, 63, 14);
contentPane.add(label_1);

JLabel label_2 = new JLabel("\u0646\u0648\u0639 \u0645\u0627\u0634\u06CC\u0646");
label_2.setBounds(220, 162, 63, 14);
contentPane.add(label_2);

JLabel label_3 = new JLabel("\u0634\u0645\u0627\u0631\u0647 \u067E\u0644\u0627\u06A9");
label_3.setBounds(220, 193, 63, 14);
contentPane.add(label_3);
}

@Override
public void actionPerformed(ActionEvent arg0) {
dlCarPersonDetail.setDlName(nameField.getText());
dlCarPersonDetail.setDlPersonID(personIdField.getT ext());
dlCarPersonDetail.setDlSurname(surNameField.getTex t());
dlCarPersonDetail.setDlCarName(carNameField.getTex t());
dlCarPersonDetail.setDlCarNumber(carNumberField.ge tText());
dlCarPersonDetail.setDlCarType(carTypeBox.getSelec tedItem().toString());
DriverClass.this.dispose();
TransportationClass ts = new TransportationClass("Data");
// ts.getDlDate(dlCarPersonDetail);
}

کلاس اصلی TransClass هست وقتی که کلاس 2 رو فراخوانی میکنم و داده رو درج می کنم و میخام به کلاس 1 برگردم و سپس دکمه "نمایش" رو بزنم داده ها از بین میره<br>و نمیدونم مشکل کجاست<br>ممنون میشم از راهنماییتون

[younes]
دوشنبه 21 دی 1394, 01:14 صبح
فکر میکنم مشکل در اینه در هر دو کلاس دو نمونه ی متفاوت از کلاس dlCarPersonDetail وجود داره چون دوبار new شده یکبار در اولی و یکبار در کلاس دوم. به عنوان یک راه حل میتونید یک نمونه از dlCarPersonDetail که در کلاس اول ساخته اید به سازنده ی کلاس دوم رد کنید و در تغییر و ثبت اطلاعات از اون استفاده کنید.

JYasProgramer
دوشنبه 21 دی 1394, 06:01 صبح
نه مشکل از اون هم نیست

JYasProgramer
دوشنبه 21 دی 1394, 08:10 صبح
بیان شما درسته
اما مشکل رو یافتم

private dlCarPersonDetail dlCarPersonDetail = new dlCarPersonDetail();

به جای این کد، کد زیر رو جایگزین کردم

private static dlCarPersonDetail dlCarPersonDetail;

وقتی که از JFrame کلاس Driver خارج میشم و داده رو به کلاس TransClass پاس میدم و پنجره مربوط به JFrame کلاس Driver بسته میشه داده همش نال میشه سپس وقتی دکمه "نمایش" رو میزنم
مقدار null رو از کلاس dlCarPersonDetail برمیگردونه
لذا اومدم به صورت static ذخیره کردم و بعد مقادیر رو فراخوانی کردم و ناگفته نمونه که این روش صحیح نیست یعنی باید از دیتابیس بخونم نه اینکه به صورت static ذخیره کنم