PDA

View Full Version : نحوه گرفتن handle يك فريم



maamiri
پنج شنبه 29 اسفند 1387, 23:11 عصر
يك سوال از دوستان جاواكار دارم.
فرض كنيد در يك فريم قرار داريم حالا با زدن يك button وارد فريم دوم مي شويم و فريم اول setVisiable(false) ميشود.حالا اگه بخوايم اين فريم را از فريم دوم setVisiable(true) كنيم بايد چكار كنيم؟
منظورم گرفتن handle يك فريم از فريم ديگر است

maamiri
جمعه 07 فروردین 1388, 17:01 عصر
یعنی کسی بلد نیست که چطور میشه handle یک فریم رو چطور میشه از یک فریم دیگه در اختیار گرفت؟

saeedIRHA
شنبه 08 فروردین 1388, 00:58 صبح
سؤالت رو بد مطرح کردی،به اين کار که شما ميخوای دسترسی به handle نميگن، دسترسی به
method ميگن، کافيه که Frame اولت رو مساوی با يک متغيير فريم قرار بدی و در فريم دوم
متد setVisible رو صدا کنی به اين صورت:


JFrame myFirstFrame = oldFrame;
myFirstFrame.setVisiable(true);

maamiri
چهارشنبه 19 فروردین 1388, 13:38 عصر
خوب حالا اگه چندتا Frame بودند چی؟

maamiri
چهارشنبه 19 فروردین 1388, 13:45 عصر
فکر کنم بد متوجه شدید...من یک فریم دارم و از اون یک فریم دیگه باز میکنم.حالا اگه بخوام از فریم دوم به فریم اول برگردم چیکار باید انجام بدم؟

Rahman.hi
پنج شنبه 20 فروردین 1388, 20:31 عصر
خودم هنگام ایجاد شی از فریم دوم اولی رو بعنوان پارامتر برای کانستراکتور اون میفرستم (بعنوان parent)

maamiri
جمعه 21 فروردین 1388, 12:19 عصر
میشه یک لینک معرفی کنید که همچین چیزی رو توش مثال زده باشه؟
من هرکاری کردم نتونستم :عصبانی++:
ممنون میشم

javaphantom
جمعه 21 فروردین 1388, 17:26 عصر
دو روش برای حل مشکل شما هست روش اول که ساده ترین حالت است رو برات کد نوشتم
روش دوم بر می گرده به pattern ها شما باید بری composite pattern بخونی وقتی تعداد component ها زیاد می شه.

اما جواب شما دو کلاس هستند یکی master دومی slave دقیقا اون چیزی که شما می خواهید master و slave رو صدا می زنه بعد قایم می شه بعد که slave اومد و رفت دوباره ظاهر می شه الله اکبر داره.

import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
*
* @author root
*/
public class MasterFrame extends JFrame {

private JButton button1;
private JPanel panel;
private SlaveFrame slaveFrame;

//constructor
public MasterFrame() {
this.setBounds(new Rectangle(300,100,500,100));
this.setName("Master Frame");
this.getContentPane().add(this.getPanel());
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}

//singleton pattern
private JPanel getPanel() {
if (this.panel == null) {
this.panel = new JPanel();
this.panel.setLayout(new FlowLayout(FlowLayout.CENTER));
this.panel.add(this.getButton1());
}
return panel;
}



// singleton pattern
private JButton getButton1() {
if (this.button1 == null) {
this.button1 = new JButton("Click");
//anonymous class creating for event handling
this.button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
slaveFrame = new SlaveFrame();
// your answer is here *******Watch Out Kid**********
// another anonymous class
slaveFrame.addWindowListener(new WindowAdapter() {

@Override
public void windowOpened(WindowEvent e) {
setVisible(false);
}


@Override
public void windowClosed(WindowEvent e) {
setVisible(true);
}

});
}
});

}
return button1;
}



import java.awt.Rectangle;
import javax.swing.JFrame;

/**
*
* @author root
*/
public class SlaveFrame extends JFrame {

public SlaveFrame() {
this.setBounds(new Rectangle(400, 100, 500, 100));
this.setName("Master Frame");
//this.getContentPane().add(this.getPanel());
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);

}
}



/**
*
* @author root
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new MasterFrame();
}

}

maamiri
جمعه 21 فروردین 1388, 18:09 عصر
خيلي ممنون...
خيلي وقت بود نبوديد....تنها كسي كه تو اين سايت انقدر با حوصله جواب ميده شما هستيد:بوس:
باز هم ممنون

javaphantom
جمعه 21 فروردین 1388, 18:17 عصر
يك سوال از دوستان جاواكار دارم.
فرض كنيد در يك فريم قرار داريم حالا با زدن يك button وارد فريم دوم مي شويم و فريم اول setVisiable(false) ميشود.حالا اگه بخوايم اين فريم را از فريم دوم setVisiable(true) كنيم بايد چكار كنيم؟
منظورم گرفتن handle يك فريم از فريم ديگر است

این هم روش دوم


import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
*
* @author root
*/
public class SlaveFrame extends JFrame {

private MasterFrame masterFrame;
private JPanel panel;
private JButton button1;

public SlaveFrame(MasterFrame masterFrame) {
this.masterFrame = masterFrame;
this.setBounds(new Rectangle(400, 100, 500, 100));
this.setName("Master Frame");
this.getContentPane().add(this.getPanel());
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);

}

//singleton pattern
private JPanel getPanel() {
if (this.panel == null) {
this.panel = new JPanel();
this.panel.setLayout(new FlowLayout(FlowLayout.CENTER));
this.panel.add(this.getButton1());
}
return panel;
}

// singleton pattern
private JButton getButton1() {
if (this.button1 == null) {
this.button1 = new JButton("Click");
//anonymous class creating for event handling
this.button1.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e) {
if(masterFrame.isVisible()) {
button1.setText("Visible");
masterFrame.setVisible(false);
} else {
button1.setText("Invisible");
masterFrame.setVisible(true);

}
}
});

}
return button1;
}
}


import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
*
* @author root
*/
public class MasterFrame extends JFrame {

private JButton button1;
private JPanel panel;
private SlaveFrame slaveFrame;

//constructor
public MasterFrame() {
this.setBounds(new Rectangle(300,100,500,100));
this.setName("Master Frame");
this.getContentPane().add(this.getPanel());
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}

//singleton pattern
private JPanel getPanel() {
if (this.panel == null) {
this.panel = new JPanel();
this.panel.setLayout(new FlowLayout(FlowLayout.CENTER));
this.panel.add(this.getButton1());
}
return panel;
}


private void callSlave() {
slaveFrame = new SlaveFrame(this);
}

// singleton pattern
private JButton getButton1() {
if (this.button1 == null) {
this.button1 = new JButton("Click");
//anonymous class creating for event handling
this.button1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
callSlave();
}
});

}
return button1;
}
}


/**
*
* @author root
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new MasterFrame();
}

}