• 0
محمد1991

Jatable cell lisner

سؤال

السلام عليكم ورحمة الله وبركاته

لو سمحتم كيف استطيع اضافة mouse listener

ليس الى الجدول بشكل كلي ولكن الى الخلايا بحيث بمجرد تعبئة قيمة خلية معينة والخروج منها يطبع قيمتها

يعني ما يشبه ال mouse Enter في ال textfeild



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package readexcel;

import java.awt.Color;
import java.awt.Component;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class MouseHoverTable extends JFrame
{
int itsRow =0;
int itsColumn = 0;
JTable itsTable;
MouseHoverTable(String framename)
{
super(framename);
//itsTable = new JTable( 5, 3 );
itsTable = new javax.swing.JTable();
itsTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Instructor Name", "Instructor Room", "Instructor load", "Extra load"
}
));

itsTable.setDefaultRenderer(Object.class, new AttributiveCellRenderer());
MyMouseAdapter aMouseAda = new MyMouseAdapter();
itsTable.addMouseMotionListener(aMouseAda);
JScrollPane jsp = new JScrollPane(itsTable);
this.getContentPane().add(itsTable);
}
public static void main(String[] args)
{
JFrame frame = new MouseHoverTable("Table Example");

frame.pack();
frame.show();
}
class MyMouseAdapter extends MouseAdapter // extends MouseAdapter
{
@Override
public void mouseExited(MouseEvent e)
{
JTable aTable = (JTable)e.getSource();
itsRow = aTable.rowAtPoint(e.getPoint());
itsColumn = aTable.columnAtPoint(e.getPoint());

}
}
class AttributiveCellRenderer extends JLabel implements TableCellRenderer {
public AttributiveCellRenderer() {

}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int
column) {
if(row == itsRow && column == itsColumn)
{
System.out.println(this.getText());
}
return this;
}
}
}

تم تعديل بواسطه محمد1991
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

مشكلة الكود هنا ..

   itsTable.addMouseMotionListener(aMouseAda);





/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package readexcel;

import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class MouseHoverTable extends JFrame
{
int itsRow =0;
int itsColumn = 0;
JTable itsTable;
MouseHoverTable(String framename)
{
super(framename);
itsTable = new JTable( 5, 3 );
//make the table transparent
itsTable.setOpaque(false);
itsTable.setDefaultRenderer(Object.class, new
AttributiveCellRenderer());
MyMouseAdapter aMouseAda = new MyMouseAdapter();
//itsTable.addMouseMotionListener(aMouseAda);
itsTable.addMouseListener(aMouseAda);
JScrollPane jsp = new JScrollPane(itsTable);
this.getContentPane().add(itsTable);//jsp);
}
public static void main(String[] args)
{
JFrame frame = new MouseHoverTable("Table Example");

frame.pack();
frame.show();
}
public class MyMouseAdapter extends MouseAdapter //extendsMouseAdapter
{

public void mouseExited(MouseEvent e)
{
JTable aTable = (JTable)e.getSource();
Point gh=new Point(e.getX(),e.getY());
itsRow = aTable.rowAtPoint(gh);
itsColumn = aTable.columnAtPoint(gh);
System.out.println(gh.toString());

aTable.repaint();
}

}
public class AttributiveCellRenderer extends JLabel implements
TableCellRenderer {
public AttributiveCellRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus, int row, int
column) {
if(row == itsRow && column == itsColumn)
{
this.setBackground(Color.red);
this.setForeground(Color.blue);
System.out.println(this.getText());
}
else
{
this.setBackground(Color.cyan);
this.setForeground(Color.darkGray);
}
String aStr = "Row " + row+ "Column"+column;
this.setText(aStr);
return this;
}
}
}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكراااا جزيلا فعلا كانت هناك المشكلة

اضفت لسنر للماوس ولكن ظهر لدي مشكلة اخرى في الجداول ان المستخدم من الممكن ان يستغني اصلا ع الماوس ويتنقل بازرار الكيبورد تلقائيا

:sad: :sad:

وهذا يعني انه علي عمل key listener

عملت ل ازرار التنقل والانتر وبكن لم استطع الحصول على محتويات الخليه

مثل الماوس


Point gh=new Point(e.getX(),e.getY());
itsRow = aTable.rowAtPoint(gh);
itsColumn = aTable.columnAtPoint(gh);

كيف استطيع ان احدد ال x,y للخلية التي تم ضغط key عندها او بمعنى اصح

الانتقال تم من اي خلية


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author almasah
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/


import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class MouseHoverTable1 extends JFrame
{
int itsRow =0;
int itsColumn = 0;
int itsRow1 =0;
int itsColumn1 = 0;
JTable itsTable;
MouseHoverTable1(String framename)
{
super(framename);
//itsTable = new JTable( 5, 3 );
itsTable = new javax.swing.JTable();
itsTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"A", "B", "BB", "N"},
{"G", "V", "F", "F"},
{"w", "s", null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Instructor Name", "Instructor Room", "Instructor load", "Extra load"
}
));

MyMouseAdapter aMouseAda = new MyMouseAdapter();
itsTable.addMouseListener(aMouseAda);
MyKeyAdapter Key=new MyKeyAdapter();
itsTable.addKeyListener( Key);
itsTable.setDefaultRenderer(Object.class, new AttributiveCellRenderer());
JScrollPane jsp = new JScrollPane(itsTable);
this.getContentPane().add(itsTable);
}
public static void main(String[] args)
{
JFrame frame = new MouseHoverTable1("Table Example");

frame.pack();
frame.show();
}
class MyMouseAdapter extends MouseAdapter // extends MouseAdapter
{
@Override
public void mouseExited(MouseEvent e)
{
JTable aTable = (JTable)e.getSource();
Point gh=new Point(e.getX(),e.getY());
itsRow = aTable.rowAtPoint(gh);
itsColumn = aTable.columnAtPoint(gh);
//System.out.println(gh.toString());


}
public void mouseReleased(MouseEvent e)
{
JTable aTable = (JTable)e.getSource();
Point gh=new Point(e.getX(),e.getY());
itsRow1 = aTable.rowAtPoint(gh);
itsColumn1 = aTable.columnAtPoint(gh);
//System.out.println(gh.toString());


}
}
public class AttributiveCellRenderer extends JLabel implements
TableCellRenderer {
public AttributiveCellRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int
column) {
int R = 0,C = 0;

if( itsRow1 ==itsRow && itsColumn1 == itsColumn){
R=itsRow;
C=itsColumn;
}
if(row == R && column == C &R!=0)
{// this.setBackground(Color.red);
System.out.println("press");
}
return this;
}
}
class MyKeyAdapter extends KeyAdapter // extends MouseAdapter
{

@Override
public void keyReleased(KeyEvent e)
{
JTable aTable = (JTable)e.getSource();
e.getKeyChar();
if(e.getKeyCode()==KeyEvent.VK_ENTER||e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_DOWN
||e.getKeyCode()==KeyEvent.VK_RIGHT||e.getKeyCode()==KeyEvent.VK_UP){

System.out.println("Enter");
}

}

}
}


0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تمكنت من قراءة ما يتم كتابته داخل كل خليه



@Override
public void keyTyped(KeyEvent ke) {
if(ke.getKeyChar()!=KeyEvent.VK_ENTER){
char i = ke.getKeyChar();

f=f+i;
System.out.println(f);

}
}

بحيث اقوم بتجميع النص من خلال الكيبورد وينتهي التجميع عند الضغط على احد ازرار الانتقال


if(e.getKeyCode()==KeyEvent.VK_ENTER||e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_DOWN
||e.getKeyCode()==KeyEvent.VK_RIGHT||e.getKeyCode()==KeyEvent.VK_UP){

f=""

ولكن عندما اتيت للمقارنة وجدت ان جميع عملي ذهب سداءا وانه لا فائدة منه طالما لا استطيع معرفة الخلية التي اقرء منها

الا يوجد طريقة لتحديد الخلية التي تتم الكتابة فيها ؟؟؟؟؟؟؟

:S :S

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته ...

كيف حالك اخى محمد ,, اتمنى ان تكون فى تمام الصحة والعافيه ..

قرأت مشكلتك بعنايه .. وتطرقت ايضا للاكود اللى صنعته والتحديثات عليه .. لكنى لم افهم كثيرا ماذا تريد .. !!

لكن انت كتب فى بدايه السؤال الجمله الاتيه :

بحيث بمجرد تعبئة قيمة خلية معينة والخروج منها يطبع قيمتها

يعني ما يشبه ال mouse Enter في ال textfeild

انا اعتقد ان فعل هذا امر سهل جدااا , بدون اضافه MouseListener او KeyListener ..

وذلك عن طريق اضافه اضافه TableModel للجدول ثم اضافة TableModelListener ..

كالآتى :


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Mogahed
*/
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class tableCellListener extends JFrame {

JTable table = new JTable();
DefaultTableModel tableModel = new DefaultTableModel(new String[]{"Column1","Column2","Column3","Column4",},7);
JLabel cellValue = new JLabel("Cell Value = ");

tableCellListener(){
super("Table Cell Listener");
setDefaultCloseOperation(3);
setSize(400,300);
setLayout(new BorderLayout());

table.setModel(tableModel);
tableModel.addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent e){
cellValue.setText("Cell Value = "+table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
});

add(new JScrollPane(table),BorderLayout.CENTER);
add(cellValue,BorderLayout.SOUTH);

setVisible(true);

}

public static void main(String[] args) {
new tableCellListener();
}

}


يااااااااا رب اكون افادتك ..

تحياتى :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .