PDA

View Full Version : سوال: فرستادن یک پنل به یک تابع



Pouri_sb
جمعه 30 مهر 1389, 15:10 عصر
سلام
می خواهم به یک تابع متغیری از نوع JPanel بفرستم، نوع آن چیست؟

Pouri_sb
جمعه 07 آبان 1389, 00:59 صبح
کسی نمی دونه؟ به خاطر این مجبور شدم یک تابع رو 10 بار با اسمهای مختلف بنویسم

jlover
جمعه 07 آبان 1389, 07:02 صبح
ببخشید، نوع JPanel از چه نوعیه!!؟

لطفا جزئیات بیشتری مهیا کنید و یک نمونه کد برای مثال ترتیب بدید تا دوستان بتونند کمکتون کنند

Pouri_sb
جمعه 07 آبان 1389, 11:27 صبح
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{
JPanel p1=new JPanel();
JLabel label=new JLabel("this is a test");
JPanel p2=new JPanel();
JPanel p=new JPanel();

JLabel label2=new JLabel("this is a message");
GridBagLayout gb=new GridBagLayout();
public Main(){
super("TEST");
setSize(350,350);
GridLayout gr=new GridLayout(1,1,20,10);
p1.setLayout(gb);
p2.setLayout(gb);
p.setLayout(gr);
addComponent1(label,0,0,6,1,100,100,GridBagConstra ints.NONE,GridBagConstraints.CENTER);
p.add(p1);
addComponent2(label2,0,0,6,1,100,100,GridBagConstr aints.NONE,GridBagConstraints.CENTER);
p.add(p2);
add(p);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private void addComponent1(Component cmp,int gridx, int gridy, int gridwidth,int gridheight, int weightx, int weighty, int fill, int anchor){
GridBagConstraints cns=new GridBagConstraints();
cns.gridx=gridx;
cns.gridy=gridy;
cns.gridwidth=gridwidth;
cns.gridheight=gridheight;
cns.weightx=weightx;
cns.weighty=weighty;
cns.fill=fill;
cns.anchor=anchor;
gb.setConstraints(cmp, cns);
p1.add(cmp);//* mikham age mishe p1 ro be onvane yek argoman be in tabe bedam ta majboor nasham baraye har panel yek tabe benevisam
}
private void addComponent2(Component cmp,int gridx, int gridy, int gridwidth,int gridheight, int weightx, int weighty, int fill, int anchor){
GridBagConstraints cns=new GridBagConstraints();
cns.gridx=gridx;
cns.gridy=gridy;
cns.gridwidth=gridwidth;
cns.gridheight=gridheight;
cns.weightx=weightx;
cns.weighty=weighty;
cns.fill=fill;
cns.anchor=anchor;
gb.setConstraints(cmp, cns);
p2.add(cmp);
}
public static void main(String[] args) {
Main obj=new Main();

}

}
نام تابع اصلی Main است

jlover
جمعه 07 آبان 1389, 15:42 عصر
مرسی جزئیات!
تابع اصلی کیه دیگه؟ یه کلاس درست کردین به نام Main که حاوی متد main هم هست، پس اجراییه..
بگذریم، اینو همینطوری گفتم، اما برگردیم سر مسئله:

اولا که برادر من چرا اصرار داری لقمه رو دور سرت بگردونی بعد میل کنی! خب بگو میخوای یه همچین شکلی نمایش داده بشه، تا راهنماییت کنیم. مثلا اینجا اصلا نیازی به p نیست ..

دوما همین الان میتونی جفت دستوراتی که اون دو تا متد رو فراخونی میکنه حذف کنی و باز هم همون نمایش رو داشته باشی!! البته دستور مثلا
p1.add(label); و همینطور لیبل 2 رو هم به پی 2 اضافه میکنی، اونوقت میبینی که متدهات بلااستفاده میشه!

سوما حتی اگه قرار بود از اون روش قهقرایی اول استفاده کنی، باز هم نیاز به نوشتن 20 تا تابع مشابه نبود! ناسلامتی طاحی شیء گرایی گفتن...
حالا این آخری نکته ی طراحیه، من الان نمیرسم خوب توضیح بدم، سعی میکنم تا شب بگم..

رو این موارد فکر کن و کار کن، چیزی نیست

موفق باشید

Pouri_sb
شنبه 08 آبان 1389, 12:37 عصر
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{
JPanel p1=new JPanel();
JLabel label=new JLabel("this is a test");
JPanel p2=new JPanel();
private JTabbedPane tabs=new JTabbedPane(JTabbedPane.LEFT,JTabbedPane.WRAP_TAB_ LAYOUT);
JLabel label2=new JLabel("this is a message");
GridBagLayout gb=new GridBagLayout();
public Main(){
super("TEST");
setSize(350,350);

p1.setLayout(gb);
p2.setLayout(gb);

addComponent1(label,0,0,6,1,100,100,GridBagConstra ints.NONE,GridBagConstraints.CENTER);
tabs.addTab("panel p1", p1);
addComponent2(label2,0,0,6,1,100,100,GridBagConstr aints.NONE,GridBagConstraints.CENTER);
tabs.addTab("panel p2", p2);
add(tabs);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private void addComponent1(Component cmp,int gridx, int gridy, int gridwidth,int gridheight, int weightx, int weighty, int fill, int anchor){
GridBagConstraints cns=new GridBagConstraints();
cns.gridx=gridx;
cns.gridy=gridy;
cns.gridwidth=gridwidth;
cns.gridheight=gridheight;
cns.weightx=weightx;
cns.weighty=weighty;
cns.fill=fill;
cns.anchor=anchor;
gb.setConstraints(cmp, cns);
p1.add(cmp);//* mikham age mishe p1 ro be onvane yek argoman be in tabe bedam ta majboor nasham baraye har panel yek tabe benevisam
}
private void addComponent2(Component cmp,int gridx, int gridy, int gridwidth,int gridheight, int weightx, int weighty, int fill, int anchor){
GridBagConstraints cns=new GridBagConstraints();
cns.gridx=gridx;
cns.gridy=gridy;
cns.gridwidth=gridwidth;
cns.gridheight=gridheight;
cns.weightx=weightx;
cns.weighty=weighty;
cns.fill=fill;
cns.anchor=anchor;
gb.setConstraints(cmp, cns);
p2.add(cmp);
}
public static void main(String[] args) {
Main obj=new Main();
}
}


کد قبلی زیاد واضح نبود چون استفاده از سه تا پنل زیاد جالب نبود :دی اما این یکی کد یک خورده واضح تره راه حلی هم که خودم به ذهنم رسید برگردوندن شی مورد نظره و سپس اضافه کردنش به پنل اما باز هم تعداد دستورهای تکراری زیاد می شه.

راستی کل این برنامه رو فقط برای اینجا نوشته بودم تا سوال واضح شه وگرنه برنامه اصلیم 10 برابره اینه :دی