ورود

View Full Version : سوال: Mouse Event در JList



spiderman200700
شنبه 19 شهریور 1390, 20:22 عصر
سلام.
دوستان چطور میشه در Index ،JList سطری که موس روی اون قرار گرفته رو به دست بیاریم.
ممنون از همگی.

spiderman200700
دوشنبه 21 شهریور 1390, 00:01 صبح
از دوستان و اساتید کسی نیست که جواب منو بده.
با کمال احترام باید بگم که به تازگی فعالیت دوستان تالار J2SE خیلی کم شده.
بابا یه کم به ما تازه کارها هم کمک کنید.
زکات علم ،آموختن اون علم به دیگرانه.
با تشکر

saeedIRHA
دوشنبه 21 شهریور 1390, 14:13 عصر
حق با شماست فعالیت این بخش خیلی‌ کم شده،
برای این کار باید یک Mouse ActionListener به component ات اضافه کنی‌،
سورس کدش در Netbeans این هست:



public class NewJFrame extends javax.swing.JFrame {

/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
jLabel1 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstan ts.EXIT_ON_CLOSE);

jList1.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "one", "two", "three", "four" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
jList1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jList1MouseClicked(evt);
}
});
jScrollPane1.setViewportView(jList1);

jLabel1.setHorizontalAlignment(javax.swing.SwingCo nstants.CENTER);
jLabel1.setText("Nothing ");
jLabel1.setBorder(javax.swing.BorderFactory.create TitledBorder("Selected Item is:"));

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(112, 112, 112)
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.TRAILING, false)
.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE))
.addContainerGap(112, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(100, 100, 100)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.Component Placement.RELATED)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}// </editor-fold>

private void jList1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
String str = jList1.getSelectedValue().toString();
jLabel1.setText("item is: " + str + " --With Index number: " + jList1.getSelectedIndex());
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}

spiderman200700
دوشنبه 21 شهریور 1390, 15:07 عصر
فکر میکنم سوالمو درست متوجه نشدید.
من میخوام وقتی موس از روی JList عبور میکنه (بدون اینکه سطری از JList انتخاب شده باشه) ،Index سطری که موس از روش عبور کرده رو بدست بیارم.
فکر میکنم باید از کلاس MouseMotionListener استفاده کنم، ولی نمیدونم چطوری.
اگه یه تکه کد کوچولو که این کار رو انجام بده ، واسم بذارید ممنون میشم.
با تشکر.

saeedIRHA
سه شنبه 22 شهریور 1390, 00:54 صبح
توابع رو بیشتر مطالعه کن، این کار اینطوری انجام می‌شه :


private void jList1MouseMoved(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:

mypoint = new Point(evt.getX(),evt.getY());

System.out.println("X = " + mypoint.getX() + " Y = " + mypoint.getY());
//Point mypoint2 = null;
int i = jList1.locationToIndex(mypoint);
System.out.println("index is: "+ i);
jList1.setSelectedIndex(i);
String str = jList1.getSelectedValue().toString();
jLabel1.setText("item is: " + str + " --With Index number: " + jList1.getSelectedIndex());



}

spiderman200700
سه شنبه 22 شهریور 1390, 09:14 صبح
توابع رو بیشتر مطالعه کن، این کار اینطوری انجام می‌شه :


private void jList1MouseMoved(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:

mypoint = new Point(evt.getX(),evt.getY());

System.out.println("X = " + mypoint.getX() + " Y = " + mypoint.getY());
//Point mypoint2 = null;
int i = jList1.locationToIndex(mypoint);
System.out.println("index is: "+ i);
jList1.setSelectedIndex(i);
String str = jList1.getSelectedValue().toString();
jLabel1.setText("item is: " + str + " --With Index number: " + jList1.getSelectedIndex());



}


ممنون از راهنماییتون.خیلی عالی بود. :تشویق:
چون خیلی بهش نیاز داشتم،باعث شد حسابی فسفر بسوزونم و خودم یه راهی واسش پیدا کنم. دیشب خودم موفق شدم یه متد برای این کار بنویسم.اصلا فکر نمیکردم اینقدر انجام این کار ساده باشه.(معما چو حل گشت،آسان شود :لبخند:)اینجا میذارمش.شاید به درد کسی خورد.(خدا رو چه دیدی) :لبخندساده:

بافرض اینکه لیست خارج از متد ساخته شده باشه :


list.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int row = getRowAt(e.getY());
if (list.getSelectedIndex() == row) {
System.out.println("saeedIRHA aziz,moamnun az shoma.");
}
}
});


اینم متد getRowAt() ، که Index سطر رو بر میگردونه:


public int getRowAt(int y) {
return (y / list.getFixedCellHeight());
}

با تشکر.