PDA

View Full Version : مشکل در نمایش JDesktopPane



omidparkour
شنبه 02 خرداد 1394, 11:24 صبح
سلام
من یک کلاس دارم به نام windows که توش یه تابع دارم به نام NewCn که توش JDesktopPane رو ساختم
بعد یک کلاس دیگه هم دارم به نام MyListener که از actionlistener ارث میبره
بعد من توی صفحه ام یه منو دارم که میخوام وقتی روی منو کلیک کرد تابع NewCn اجرا بشه

بعد کدهای زیر رو توی کلاس MyListener نوشتم :


@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("Exit"))
{
System.exit(0);
}
else if(command.equals("New Contact"))
{
//اینجا چه کدی باید بنویسم تا تابع NewCn اجرا بشه
}
}
اگر توی اون قسمتی از کد که کامنت کردم کدهای زیر رو بنویسم کار میکنه اما مشکلی که پیش میاد یه پنجره دیگه هم ایجاد میکنه چون توی سازنده کلاس windows اومدم و پنجره ام رو ساختم :

Windows win = new Windows();
win.NewCn();
چیکار باید بکنم؟

ahmad.mo74
سه شنبه 05 خرداد 1394, 13:21 عصر
سلام. کاش کد کامل میذاشتید تا بهتر بشه کمکتون کرد.
ولی من یه نمونه مینویسم که تقریبا مشابه کاری باشه که میخوای انجام بدی :


public class Windows extends JFrame {


private static Windows INSTANCE;


private Windows() {
init();
}


private void init() {
setTitle("Windows");
setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE);
setPreferredSize(new Dimension(400, 500));
setLocationRelativeTo(null);


//TODO the rest of the initializations...


pack();
}


public static Windows getInstance() {
return INSTANCE == null ? INSTANCE = new Windows() : INSTANCE;
}


public void createNewContact() {
//TODO create new Contact
}


public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAn dFeelClassName());
} catch (ClassNotFoundException | UnsupportedLookAndFeelException | IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
EventQueue.invokeLater(() -> getInstance().setVisible(true));
}


}



public class ContactListener implements ActionListener {


@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("Exit")) {
System.exit(0);
} else if (command.equals("New Contact")) {
Windows.getInstance().createNewContact();
}
}


}


کاری که کردیم این بود که Windows رو singleton تعریف کردیم و توی ContactListener دیگه Windows جدیدی نساختیم.

حالا کارای دیگه ای هم میشد انجام داد مثلا اینکه خود Windows بیاد ActionListener رو پیاده سازی کنه و ...
اگه کدت رو کامل میذاشتی بهتر بود.