PDA

View Full Version : رویداد کلیک برای Jlabel



pouria_bayat
دوشنبه 13 تیر 1390, 13:52 عصر
سلام دوستان اگر بخواهیم برای ارایه ای از Jlabel ها رویداد کلیک ماوس رو داشته باشیم باید برای تک تک Jlabel ها این رویداد رو تعریف کنیم یا کار دیگه ای میشه کرد مثلا فرض کنید یک ارایه از Jlabel به شکل زیر داریم:

JLabel[] lcheck = new JLabel[18];

حال اگر بخواهیم برای مثلا JLabel دوم رویداد کلیک رو تعریف کنیم از دستورات زیر استفاده میکنیم که درست هم است :

lcheck[1].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
JLabel jlclick = new JLabel("HI!!!!!!!!!!", JLabel.CENTER);
jlclick.setSize(120, 190);
jlclick.setToolTipText("just check");
jlclick.setVisible(true);
panel1.add(jlclick);
panel1.updateUI();

}
});
بچه ها راهی هست که نخوایهم برای تک تک JLabel هامون اینکارو بکنیم؟!!!!!!!!

pouria_bayat
دوشنبه 13 تیر 1390, 22:47 عصر
بچه ها اگر کسی بلده دریغ نکنه خیلی گیرم لطفا اگر میدونید بگید چی کار کنم.

javaphantom
سه شنبه 14 تیر 1390, 00:16 صبح
بچه ها اگر کسی بلده دریغ نکنه خیلی گیرم لطفا اگر میدونید بگید چی کار کنم.

برای بار Nم توی این فروم سوال مطرح شده که یک آرایه از یک کلاس دارم ولی کار نمی کنه.

می دونم برای N بار دیگه هم باید این کد رو بنویسم اما اول ازهمه می ریم سراغ جواب این مسئله که آرایه ای از یک کلاس رو چطوری درست کنیم و استفاده کنیم


public class MyClass {


private String className;

public String getClassName() {
return className;
}

public void setClassName(String className) {
this.className = className;
}


public static void main(String[] s) {


MyClass[] myClasses = new MyClass[5];

/**
* We have to instantiate all 5 classes like an ordinary class
*/
for (int i = 0; i < myClasses.length; i++) {
myClasses[i] = new MyClass();
myClasses[i].setClassName("MyClass Index Number is " + i);
}

/**
* Now we can use them
*/

System.out.println("myClasses[0].getClassName() = " + myClasses[0].getClassName());
System.out.println("myClasses[3].getClassName() = " + myClasses[3].getClassName());


}
}



اما جواب سوال اصلی. اینکه یک کامپونت مثل JLabel داشته باشیم یک event براش بنویسم و وقتی آرایه ای از اون تعریف کردیم برای همشون اون event کار کنه


import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 7/4/11
* Time: 10:55 PM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {

private JLabel[] labels = new JLabel[5];


private void initializeAllLabels() {
// JLabel label = null;
for (int i=0; i<labels.length; i++) {

labels[i] = new JLabel();

final JLabel label = labels[i];

labels[i].setText("I'm number " + i);
labels[i].addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, label.getText());
}
});
}
}

public MyFrame() {

this.setBounds(new Rectangle(400, 400));
this.setLayout(new FlowLayout(FlowLayout.RIGHT));

this.initializeAllLabels();


for (int i = 0; i < labels.length; i++) {
this.getContentPane().add(labels[i]);
}

this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);

}


public static void main(String[] s) {
new MyFrame();
}

}

pouria_bayat
سه شنبه 14 تیر 1390, 00:48 صبح
ممنون بابک جان عذر میخواهم وقتتو گرفتم باور کن بخدا بار علمی ما بیش از این نیست و تا دستمونو نگیرن نیمتونیم خودمونو بکشیم بالا خیلی زحمت دادم.

pouria_bayat
سه شنبه 14 تیر 1390, 15:02 عصر
اقا یک سوال دیگه شرمنده .
اینکه من اومدم از طریق کارهایی که گفتی اینکارو کردم و نتیجه گرفتم مثل شکل زیر:

for (int i = 0; i < 18; i++) {
lField[i] = new JLabel("Text", JLabel.CENTER);
final JLabel namelabel = lField[i];
lField[i].setName(String.valueOf(i+1))
lField[i].addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent e) {
JLabel jlclick = new JLabel(namelabel.getName(), JLabel.LEFT);
jlclick.setSize(120, 80);
jlclick.setToolTipText("Field");
jlclick.setVisible(true);
rsuild.add(jlclick);
ylabel = ylabel + 10;
jlclick.setLocation(10, ylabel);
rsuild.updateUI();



}
});
}


همونطور که می بینید من او.مد یک رویداد کلیک رو به همشون اضاف کردم و بابت راهنمایتونم ممنون تا اینجا جواب گرفتم اما یک مشگلی بوجود اود برام اینکه اگر دقت کنید به ازای هر کلیک روی Jlabel ها یک Jlabel جدیدی New میشه و به یک Jpanel به نام rsuild اضافه میشه چیزی که هستش اینجا من چه جور میتونم یک کنترل ScrollBar به PanelJ مربوطه اضافه کنم تا تمام Jlabel هایی که بهش اضافه میشه رو نشون بده؟!!!!!

pouria_bayat
سه شنبه 14 تیر 1390, 20:24 عصر
از این دوستور هم که استفاده میکنم Panel و یکسری چیزهای دیگه میریزه بهم :

this.getContentPane().add(new JScrollPane(rsuild));
اخه من Panel رو توی یک panel دیگه گذاشتم (یعنی rsuild رو توی یک Panel دگه به کار بردم...)نعلت به این Netbeans که دتس و بالامرو بسته دیگه اخرهای برنامه هستم نمیتونم دستی کد نویسی کنم از این منبعد دستی مینویسم ....

pouria_bayat
سه شنبه 14 تیر 1390, 21:45 عصر
راستی یک کار دیگه هم انجام دادم بر اساس سرچهایی که توی اینترنت داشتم ولی بازم ناقصه و جواب درستی نگرفتم نگاه کنید من اومدم یک Jlabel به panel که گفتم یعنی rsuild اضافه کردم و سپس توی برنامه از کدهای زیر استفاده کردم:

JScrollPane scroll = new JScrollPane(jluild,JScrollPane.VERTICAL_SCROLLBAR_ ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setSize(jluild.getSize());
rsuild.add(scroll);
scroll.doLayout();
خب برنامه رو اجرا کردم و jlabel lزبور(jluild) دارای scrooll شد اما چیزی که هست اینه که scroleh فقط شکلش هست و در حیقیت کاری انجام نمیده و غیر فعال هستش اینم عکسش:
71964
لطفا کمک کنید!!!!!!!! اون عددهای 8 در حقیقت رویداد کلیکی هستش که بالا گفتم و با هر کلیک بک jlabel جدید به Jlabel مربوطه اضافه میشه.(علم یاد گرفتن واقعا سخته!!!!!!!!!)

javaphantom
چهارشنبه 15 تیر 1390, 17:04 عصر
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;

/**
* Created by IntelliJ IDEA.
* User: azarmi
* Date: 7/6/11
* Time: 4:03 PM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {

private JScrollPane scrollPane;

private JLabel[] labels = new JLabel[100];

private JPanel panel = new JPanel();

public MyFrame() {
this.setBounds(new Rectangle(400, 400));
this.setDefaultCloseOperation(WindowConstants.EXIT _ON_CLOSE);
this.setLocationRelativeTo(null);

this.panel.setLayout(new GridLayout(50,2));


for (int i = 0; i < labels.length; i++) {
labels[i] = new JLabel("my name is " + i);
labels[i].setBorder(new BevelBorder(BevelBorder.RAISED));
panel.add(labels[i]);
}

this.scrollPane = new JScrollPane(panel);

this.getContentPane().add(this.scrollPane);


this.setVisible(true);

}


public static void main(String[] s) {
new MyFrame();
}
}

javaphantom
چهارشنبه 15 تیر 1390, 17:08 عصر
انیم با event


import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
* Created by IntelliJ IDEA.
* User: azarmi
* Date: 7/6/11
* Time: 4:03 PM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {

private JScrollPane scrollPane;

private JLabel[] labels = new JLabel[100];

private JPanel panel = new JPanel();

public MyFrame() {
this.setBounds(new Rectangle(400, 400));
this.setDefaultCloseOperation(WindowConstants.EXIT _ON_CLOSE);
this.setLocationRelativeTo(null);

this.panel.setLayout(new GridLayout(50, 2));


for (int i = 0; i < labels.length; i++) {
labels[i] = new JLabel("my name is " + i);
final int finalI = i;
labels[i].addMouseListener(new MouseAdapter() {

/**
* {@inheritDoc}
*/
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, labels[finalI].getText());
}
});
labels[i].setBorder(new BevelBorder(BevelBorder.RAISED));
panel.add(labels[i]);
}

this.scrollPane = new JScrollPane(panel);

this.getContentPane().add(this.scrollPane);


this.setVisible(true);

}


public static void main(String[] s) {
new MyFrame();
}
}

pouria_bayat
چهارشنبه 15 تیر 1390, 20:41 عصر
سلام بابت زحمتاتون ممنون واقعا توی فروم تلاش میکنید که جای تشکر داره .
ممنون بابت راهنمایتون اما یک مشگلی هستش من از قبل توی netbeans کار کردم حالا این به هیچ اینجا فکر کنم scrollpane روی فریم کار میکنه؟
مطلب من اینطوری یک Panel اصلی دارم و که دوتا Panel دیگه داخلشه یکی سمت چپ و دیگری سمت راست فریم بعد توی Panel سمت چپ یکسری Label هستش که یکسری عکس رو بهم نشون میده وقتی روی اون عکسها کلیک میکنم توی فریم سمت راست با یکسری توضیحات اون عکس نشون داده میشه تا اینجا من پیش رفتم اما مشگل از جایی شروع میشه که اگر من روی تعداد زیادی از عکسها کلیک کنم فقط چندتاشون نشون میده و ما بقی میرن زیر در حقیقت باید از اسکرول استفاده کنم بابت راهنمایتون ممنون این کد رو که میزارم توی فریمم اصلا کلا Panel سمت راستی که باید نتیجه رو بهم بده غیب میشه مونم اشتباه کارم کجاست؟!!! دارم کلافه میشم/.