PDA

View Full Version : قرار دادن عكس در يكي از كالومنها يا cell هاي يك سطر از Jtabel



pouria_bayat
یک شنبه 21 فروردین 1390, 23:48 عصر
سلام كسي ميدونه چطوري ميشه توي يك cell‌از يك سطر از jtabel عكس قرار داد ؟

pouria_bayat
دوشنبه 22 فروردین 1390, 10:03 صبح
با استفاده از كدهاي زير ميشه اينكارو كرد


static class ImageRenderer extends DefaultTableCellRenderer {

JLabel lbl = new JLabel();

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

lbl.setIcon((ImageIcon) value);

return lbl;

}
}





jtatt.getColumnModel().getColumn(3).setCellRendere r(new ImageRenderer());
DefaultTableModel jtchange = (DefaultTableModel) jtatt.getModel();

jtchange.addRow(new Object[]{
sub,add,mul
});
jtchange.setValueAt(icon, 0, 3);

pouria_bayat
دوشنبه 22 فروردین 1390, 10:07 صبح
لطفا بچه ها كمي فعال تر باشيد الان بخش جاوا خيلي ضعيف شده و تعداد پاسخهاي سوالات توي روز به يكي دوتا تاپيك و گاهي اوقات به صفر رسيده، به هر حال كسي ميدونه چطور ميشه متن cell هاي يك jtabel يا اطلاعات سطرهايي كه براي نمايش به كاربر ه كار ميره رو وسط چين كرد تا در وسط cell ها نميايش پيدا كنه نه سمت چپ اونها؟

javaphantom
دوشنبه 22 فروردین 1390, 10:58 صبح
لطفا بچه ها كمي فعال تر باشيد الان بخش جاوا خيلي ضعيف شده و تعداد پاسخهاي سوالات توي روز به يكي دوتا تاپيك و گاهي اوقات به صفر رسيده، به هر حال كسي ميدونه چطور ميشه متن cell هاي يك jtabel يا اطلاعات سطرهايي كه براي نمايش به كاربر ه كار ميره رو وسط چين كرد تا در وسط cell ها نميايش پيدا كنه نه سمت چپ اونها؟

بگرد تو اینتر نت جواب این سوالم پیدا می کنی.

این سوالاتی که شما می کنید هیچ کدوم بار علمی و نکته خواصی نداره و پیداه سازی اونها بسیار راحته. حداقل برای من. مهم اینکه شما به خودت زحمت بدی. نوشتن کد آسونترین کاری که می شه انجام داد.
علت اینکه تعداد پاسخهاي سوالات توي روز به يكي دوتا تاپيك و گاهي اوقات به صفر رسيده از نظر من بخاطر ضعیف بود سوالها و تکراری بودن آنهاست.

pouria_bayat
دوشنبه 22 فروردین 1390, 11:58 صبح
من توهيني نكردم منباب اينكه خداي نكرده كسي نميدونه من گفتم سوالاتي كه براي شما اسونه شايد براي خيلي از بچه ها سخت باشه همين مثلا نوشتن متن cell ها به طوري كه وسط چين باشه براي من سخته و اينكه بتونم توش راست كليك كنم روي يكي از cell هاي كه عكس روش قرار دادم و بتونم عكس رو تغيير بدم واقعا سخته براي من اما چه بسا براي شما خيلي راحت باشه پيمان جان من قصد جسارت نداشتم من از بار علمي شما خيلي استفاده كردم و بارها هم گفتم اما واقعا بهتون نياز داريم اگر ببينيد همچين سوالاتي رو هم توي فرومهاي مختلف خارجي جواب ميدن مشگل ما اينجاست كه زبانمون فارسيه و ترجمه براي من نوعي سخته و چه بسا همين سوالاتها رو جاي ديگه هم جواب ميدن اما اگر حقيقت رو بخواهيم تنها فرومي كه توي ايران در زمينه برنامه نويسي در سطح مبتدي تا حرفه اي كار ميكنه همينه اگر ما سوالاتمونو نتونيم اينجا بپرسيم كجا بايد دنبال جواب سوالاتمون بگرديم و از كي بايد پرسيد؟

javaphantom
دوشنبه 22 فروردین 1390, 12:49 عصر
من توهيني نكردم منباب اينكه خداي نكرده كسي نميدونه من گفتم سوالاتي كه براي شما اسونه شايد براي خيلي از بچه ها سخت باشه همين مثلا نوشتن متن cell ها به طوري كه وسط چين باشه براي من سخته و اينكه بتونم توش راست كليك كنم روي يكي از cell هاي كه عكس روش قرار دادم و بتونم عكس رو تغيير بدم واقعا سخته براي من اما چه بسا براي شما خيلي راحت باشه پيمان جان من قصد جسارت نداشتم من از بار علمي شما خيلي استفاده كردم و بارها هم گفتم اما واقعا بهتون نياز داريم اگر ببينيد همچين سوالاتي رو هم توي فرومهاي مختلف خارجي جواب ميدن مشگل ما اينجاست كه زبانمون فارسيه و ترجمه براي من نوعي سخته و چه بسا همين سوالاتها رو جاي ديگه هم جواب ميدن اما اگر حقيقت رو بخواهيم تنها فرومي كه توي ايران در زمينه برنامه نويسي در سطح مبتدي تا حرفه اي كار ميكنه همينه اگر ما سوالاتمونو نتونيم اينجا بپرسيم كجا بايد دنبال جواب سوالاتمون بگرديم و از كي بايد پرسيد؟

چون پسر خوبی هستی بزار اول مشکل کلیک کردن رو CELL رو برات حل کردم ببین. اون یکیم بهت نمی گم تا یکم خودت روش کار کنی. خیلی سادست. از پست اولی که خودتم جوابشو دادی کمک بگیر

اما click


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

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

private JPanel myPanel;
private JTable myTable;
private Object[] columns = {"col_1", "col_2", "col_3"};
private Object[][] rows = {{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}};


public MyFrame() {
this.setBounds(new Rectangle(300,300));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().add(this.getMyPanel());
this.setVisible(true);
}


public JPanel getMyPanel() {
if (this.myPanel == null) {
this.myPanel = new JPanel();
this.myPanel.add(this.getMyTable());
}
return myPanel;
}

public JTable getMyTable() {
if (this.myTable == null) {
this.myTable = new JTable(new DefaultTableModel(rows,columns));
this.myTable.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
int row = myTable.rowAtPoint(e.getPoint());
int column = myTable.columnAtPoint(e.getPoint());
System.out.println("myTable.getValueAt(row,column) = " + myTable.getValueAt(row, column));
System.out.println("column + right click = " + column);
System.out.println("row + right click = " + row);
} else {
System.out.println("right click kon baba");
}
}
});
}
return myTable;
}

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

javaphantom
دوشنبه 22 فروردین 1390, 12:50 عصر
من توهيني نكردم منباب اينكه خداي نكرده كسي نميدونه من گفتم سوالاتي كه براي شما اسونه شايد براي خيلي از بچه ها سخت باشه همين مثلا نوشتن متن cell ها به طوري كه وسط چين باشه براي من سخته و اينكه بتونم توش راست كليك كنم روي يكي از cell هاي كه عكس روش قرار دادم و بتونم عكس رو تغيير بدم واقعا سخته براي من اما چه بسا براي شما خيلي راحت باشه پيمان جان من قصد جسارت نداشتم من از بار علمي شما خيلي استفاده كردم و بارها هم گفتم اما واقعا بهتون نياز داريم اگر ببينيد همچين سوالاتي رو هم توي فرومهاي مختلف خارجي جواب ميدن مشگل ما اينجاست كه زبانمون فارسيه و ترجمه براي من نوعي سخته و چه بسا همين سوالاتها رو جاي ديگه هم جواب ميدن اما اگر حقيقت رو بخواهيم تنها فرومي كه توي ايران در زمينه برنامه نويسي در سطح مبتدي تا حرفه اي كار ميكنه همينه اگر ما سوالاتمونو نتونيم اينجا بپرسيم كجا بايد دنبال جواب سوالاتمون بگرديم و از كي بايد پرسيد؟

راستی اسم من پیمان نیست بابک هست

javaphantom
دوشنبه 22 فروردین 1390, 13:19 عصر
امان از دست تو بچه

اینم جواب کل


public class MyFrame extends JFrame {

private JPanel myPanel;
private JTable myTable;
private Object[] columns = {"col_1", "col_2", "col_3"};
private Object[][] rows = {{"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}};


public MyFrame() {
this.setBounds(new Rectangle(300, 300));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().add(this.getMyPanel());
this.setVisible(true);
}


public JPanel getMyPanel() {
if (this.myPanel == null) {
this.myPanel = new JPanel();
this.myPanel.add(this.getMyTable());
}
return myPanel;
}

public JTable getMyTable() {
if (this.myTable == null) {
this.myTable = new JTable(new DefaultTableModel(rows, columns));
this.myTable.getColumnModel().getColumn(0).setCell Renderer(new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = new JLabel();
label.setText(String.valueOf(value));
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
});
this.myTable.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
int row = myTable.rowAtPoint(e.getPoint());
int column = myTable.columnAtPoint(e.getPoint());
System.out.println("myTable.getValueAt(row,column) = " + myTable.getValueAt(row, column));
System.out.println("column + right click = " + column);
System.out.println("row + right click = " + row);
} else {
System.out.println("right click kon baba");
}
}
});
}
return myTable;
}

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

pouria_bayat
دوشنبه 22 فروردین 1390, 13:36 عصر
مهشري بابك جان عذر ميخواهم اگر اسم شريفتونو اشتباه گفتم ممنونم كه جواب داديد واقعا كارتون عاليه بخدا از ديشب تا الان نزديك 7 الي 8 ساعتي سرچ ميكردم ولي مفهوم نداشت تا الان كه شما توضيح داديد ممنون :قلب::تشویق:

pouria_bayat
دوشنبه 22 فروردین 1390, 13:54 عصر
راستي بابك جان اگر بخواهيم تعدادي ساعت توي يك jlabel كه نشان دهنده اتمام پروسه ها هستش رو توي سطرهاي مختلف نمايش بديم به طوري كه هر ساعت يك تايمر رو داشته باشه و بتونه كم بشه و زياد بشه چي كار بايد كرد مثلا فرض كنيد اينطوري باشه jtabel‌ما:
68574


و مثلا ساعت 12 داره از خودش كم ميكنه(مثل ساعت كامپيوتر) تا برسه به 00:00:00 و يك عمليات مثلا يك كلاس صدا زده بشه و يا مثلا ساعت 11 زياد بشه به ساعت 11:50:00 كه رسيد يك كلاس ديگه صدا زده بشه.

شرمنده اگر سوال ميكنم بخدا خودمم خجالت ميكشم ديگه سوال كنم ولي وقتي گير ميكنم ميگم بزار يكبار ديگه مزاحمتون بشم باعث شرمندگي.

pouria_bayat
چهارشنبه 24 فروردین 1390, 22:18 عصر
سلام بابك جان اقا من از سورس كد براي قرار دادن عكس بود توي كدهاي بالا كه خودم پيداش كرده بودم ازش استفاده كردم براي قرار دادن عكس دفعات اول اينكارو انجام ميده اما وقتي بعد از يكسري پردازش ميخواهم يك عكس ديگروبزارم با ارور مواجه ميشم عكسشو به همراه ارورها گذاشتم ايا خودتون كد خاصي داريد كه ازش استفاده كنم؟
68693

اينم كدي كه پيدا كردم دارم ازش استفاده ميكنم اشكال كار من كجاست؟



static class ImageRenderer extends DefaultTableCellRenderer {

JLabel lbl = new JLabel();

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

lbl.setIcon((ImageIcon) value);

return lbl;

}
}





راستي من فقط ميخواهم يكي از فيلدها عكس دار بشه از كد خودت كه براي وسط چين كردن متن بود استفاده كردم عكسرو گذاشت ولي كل ستونهاش عكس دار شد.

javaphantom
پنج شنبه 25 فروردین 1390, 11:20 صبح
راستي من فقط ميخواهم يكي از فيلدها عكس دار بشه از كد خودت كه براي وسط چين كردن متن بود استفاده كردم عكسرو گذاشت ولي كل ستونهاش عكس دار شد.


public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)

تو متدود بالایی اگر دقت کنی دو تا ارگومان داره که مربوط به row , column هست می توتی قبلش شرط بزارکه اگر row = =2 && column ==4 بود
lbl.setIcon((ImageIcon) value);

برای error قبلی هم باید چک کنی ببینی که که مثلا
if (value instanseof String) بود بعد بیایی اون رو به jlable کست کنی

pouria_bayat
پنج شنبه 25 فروردین 1390, 12:55 عصر
ممنون بابك جان اقا من از كدي كه گفتم استفاده كردم:

if (value instanceof String)
ولي باز ارور گرفت همون ارور قبل.

براي ست كردن عكس هم از اين كدها استفاده كردم:



jtatt.getColumnModel().getColumn(7).setCellRendere r(new ImageRenderer());
ImageIcon Df = new ImageIcon("sc" + File.separator + "Bt" + File.separator + "Img" + File.separator + "tt" + File.separator + "ho.png");
jtchange.setValueAt(Df, i, 7);






يك توضيح كوچك بدم برنامه بتونه تعداد سطرهاي يك Jtabel كه پر شده رو بگيره و يكي از فيلدها توي هر سطر كه يك عكس است كه نشان دهنده فعال بودن يا فعال نبودن اون سطره مثل علامت صحيح و ضربدر بعد برنامه تك تك سطرها رو چك كنه سطرهايي كه توي اون فيلد خاص كه عكس قرار داده شده مثلا فيلد يك رو بگيره و چك كنه اگر عكس مربوطه صحيح بود يعني اون سطر فعاله سپس عمليات مربوط به اون سطر رو انجام بده و توي فيلد شماره 7 اون سطر يك عكس مبني بر اينكه اون سطر پردازش شده و عملياتش انجام شد رو بزاره من تقريبا 90% كار رو رفتم ابتدا تعداد سطرها رو گرفتم سپس چك كردم كه اون سطر فعاله يانه با عكسي كه قبلا توي فيلد قرار دادم و عمليات اون سطر رو انجام دادم با صدا زدن يك تابع و وقتي ميخواهم توي فيلد شماره 7 سطر يك عكس ديگه بزارم ارورها ظاهر ميشه.

از كد خودتونم كه استفاده ميكنم تمام ستونهاي شماره 7 تمام سطرها رو يك عكس ميزاره مثلا توي كدي كه گذاشته بوديد اينكارو كردم:


jtatt.getColumnModel().getColumn(7).setCellRendere r(new TableCellRenderer() {

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
ImageIcon type = new ImageIcon("sc" + File.separator + "Bt" + File.separator + "Img" + File.separator + "Tt" + File.separator + "Rn.JPG");
JLabel label = new JLabel();
label.setIcon(type);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
});



همانطور كه گفته بوديد اومدم يك شرط گذاشتم كه اگر row = =i بود بياد اينكارو بكنه اما نشد ميگه i بايد final باشه I رو كه فاينال ميكنم نميزاره مقدارهاش توسط حلقه for‌تغيير كنه ميگه كه شما i رو فاينال تعريف كرديد و مقدار دهي اوليه شده و خودتم ميدوني ديگه اما نكته اي كه هستش من نميتونم بگم بهش كه row==2 باشه چرا چون هر دفعه بايد يك سطرو چك كنه و شرطم بايد باحلقه پيش بره و همه سرها رو چك كنه اگر ستون اولش چيزي بود كه من ميخواهم ستون هفتم هر سطرو جدا بزاره و بعضي از سطرها ستون هفتمش خالي ميمونه.
اينم عكسش:
http://up.iranblog.com/images/0s9dlgle7zpsdt76lnne.jpg

pouria_bayat
جمعه 26 فروردین 1390, 10:28 صبح
سلام خدا رو شكر اين موضوع هم حل شد توي يك تابع گذاشتمش و صداش زدم درست شدف ممنون بابك جان اگر پستهاي قبلي شما نبود نمي تونسم حلش كنم تشكر ويزه اما كد مربوطه:


public void settableimg(final int trow, JTable jt, int col) {
jt.getColumnModel().getColumn(col).setCellRenderer (new TableCellRenderer() {

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (row == trow) {
ImageIcon type = new ImageIcon("s" + File.separator + "Bt" + File.separator + "Ig" + File.separator + "Tt" + File.separator + "Rn.JPG");
JLabel label = new JLabel();
label.setIcon(type);
label.setHorizontalAlignment(JLabel.CENTER);
return label;
} else {
return null;
}
}
});
}



اين كدها رو هم گذاشتم كه اگر كسي يك روزي به مشگل من خورد بتونه استفاده كنه.
باز تشكر بابك عزيز.

javaphantom
جمعه 26 فروردین 1390, 11:28 صبح
من توی یک سطر خاص با یک ستون خاص برات یک عکس انداختم.

توی error هایی که داره بهت نشون می ده داستان این هست که شما مفهوم inner class رو خوب متوجه نشدی و همچنین داستان anonymous class رو هم متوجه نشدی. یک سرچی بکن و ببین داستانش چیه اگر متوجه نشدی که یک پست جدید بزن تا توضیح بدم با کد. اما جواب


public class MyFrame extends JFrame {

private Object[] columns = {"name", "pic"};
// private Object[][] rows = {{"mammad"}, {"no pic"}}, {{"ali"}, {"no pic"}}, {{"zohreh"}, {"no pic"}, {"zahra"}, {"no pic"}};
private Object[][] rows = {{"mammad","no pic"},{"ali","no pic"},{"zohreh","no pic"},{"zahra","no pic"}};

private JPanel myPanel;

private JTable myTable;

public MyFrame() {
this.setBounds(new Rectangle(400, 400));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().add(this.getMyPanel());
this.setVisible(true);
}

public JPanel getMyPanel() {
if (myPanel == null) {
this.myPanel = new JPanel();
this.myPanel.add(this.getMyTable());
}
return myPanel;
}

public JTable getMyTable() {
if (this.myTable == null) {
this.myTable = new JTable(new DefaultTableModel(rows, columns) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});

myTable.setRowHeight(100);

this.myTable.getColumnModel().getColumn(1).setCell Renderer(new TableCellRenderer() {

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

if (value instanceof String) {
if (row == 2 && column == 1) {
JLabel label = new JLabel();
Image image =Toolkit.getDefaultToolkit().createImage("/home/Babak/Downloads/picc.jpeg");
ImageIcon imageIcon = new ImageIcon(image);
label.setIcon(imageIcon);
return label;
}
}
return null;
}
});
}
return myTable;
}

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

pouria_bayat
جمعه 26 فروردین 1390, 20:11 عصر
اين درست بابك جان اما يك مشگلي هستش من گفتم كه بايد تمام سطرها رو چك كنم و مثلا فرض كن توي يك Jtabel 9 تا سطر دارم و براساس فيلد اول اونها توي فيلد 7 امشون عكس بزارم و اينم كاربر وارد ميكنه سطرهارو من فقط ميتونم توي كد برنامه تعداد سطرها رو بگيرم و چك كنم مثلا اگر كالومن اول هر سطر مثلا عدد 7 بود توي كالومن 7 اون عكس بزار توي كد بالايي كه گذاشتم چون final‌هستش فقط سطر اول گاهي اوقات درست ميشه و در بقيه موارد نميزاره اگر تعداد سطرها زياد بشه. چي كار بايد كرد وقتي نبايد row==عدد توي شرط چك كرد و بايد row==يك متغير چك بشه كه نشان دهنده شماره سطر هستش.

javaphantom
یک شنبه 28 فروردین 1390, 10:30 صبح
هم کلیک می کنه هم تغییر می ده


import javax.swing.*;
import java.awt.*;

/**
* Created by IntelliJ IDEA.
* User: azarmi
* Date: 4/17/11
* Time: 9:38 AM
* To change this template use File | Settings | File Templates.
*/
public class MyLabel extends JLabel {

private boolean checked = false;
private String myLocation;

public static final String CHECK = "C:\\Documents and Settings\\azarmi\\My Documents\\Downloads\\tick.png";
public static final String UN_CHECK = "C:\\Documents and Settings\\azarmi\\My Documents\\Downloads\\Cancel2-32.png";

Image checkImage = Toolkit.getDefaultToolkit().createImage(CHECK);
Image unCheckImage = Toolkit.getDefaultToolkit().createImage(UN_CHECK);

public MyLabel() {
this.setIcon(new ImageIcon(unCheckImage));
this.setAlignmentX(CENTER_ALIGNMENT);
}


public boolean isChecked() {
return checked;
}

public void setChecked(boolean checked) {
this.checked = checked;
}

public String getMyLocation() {
return myLocation;
}

public void setMyLocation(String myLocation) {
this.myLocation = myLocation;
}
}



import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
* Created by IntelliJ IDEA.
* User: azarmi
* Date: 4/17/11
* Time: 9:38 AM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {


private JPanel myPanel;
private JTable myTable;

private Object[] columns = {"pic"};
private Object[][] rows = {{new MyLabel()}, {new MyLabel()}, {new MyLabel()}, {new MyLabel()}};

public MyFrame() {
this.setBounds(new Rectangle(400, 400));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().add(this.getMyPanel());
this.setVisible(true);
}

public JPanel getMyPanel() {
if (this.myPanel == null) {
this.myPanel = new JPanel();
this.myPanel.add(this.getMyTable());
}
return myPanel;
}

public JTable getMyTable() {
if (this.myTable == null) {
this.myTable = new JTable(new DefaultTableModel(rows, columns) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
this.myTable.setRowHeight(32);

this.myTable.getColumnModel().getColumn(0).setCell Renderer(new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof MyLabel) {
MyLabel label = (MyLabel) value;
label.setMyLocation(String.valueOf(row));
return label;
}
return null;

}
});

this.myTable.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void mouseClicked(MouseEvent e) {
int rowAt = myTable.rowAtPoint(e.getPoint());
int columnAt = myTable.columnAtPoint(e.getPoint());
Object valueAt = myTable.getValueAt(rowAt, columnAt);
if (valueAt != null && valueAt instanceof MyLabel) {
MyLabel label = (MyLabel) valueAt;
if (!label.isChecked()) {
label.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().createImage( MyLabel.CHECK)));
} else {
label.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().createImage( MyLabel.UN_CHECK)));
}
label.setChecked(!label.isChecked());

}

myTable.repaint();
}
});
}
return myTable;
}

public void changeTableIcon() {
int rowCount = this.getMyTable().getRowCount();
int rowIndex = 0;
while (rowIndex < rowCount) {
Object valueAt = this.getMyTable().getValueAt(rowIndex, 0);
if (valueAt instanceof MyLabel) {
MyLabel label = (MyLabel) valueAt;
if (rowIndex % 2 == 0 && !label.isChecked()) {
label.setIcon(new ImageIcon(MyLabel.CHECK));
}
}
rowIndex++;
}
}

public static void main(String[] s) {
MyFrame m = new MyFrame();
m.changeTableIcon();
}
}

pouria_bayat
جمعه 10 تیر 1390, 13:40 عصر
سلام بابک جان خوبی اقا دوتا سوال داشتم یک نگاه به کد زیر بندازه:


public static class changetable implements Runnable {
public void run() {
.
.
.

jtableF.getColumnModel().getColumn(1).setCellRende rer(new ImageRenderer());
jtableF.getColumnModel().getColumn(4).setCellRende rer(new ImageRenderer());

jtchange.addRow(new Object[]{Name, "", Family, Age, "", Work, Time, "", inf1, inf2, inf3, inf4, inf5, inf6, inf7, inf8, inf9, inf10, inf11});
int rowcount = jtchange.getRowCount();
jtchange.setValueAt(icon, rowcount - 1, 1);
jtchange.setValueAt(type, rowcount - 1, 4);

}


} while (!stand == true);
}//end run
}//endp class

static class ImageRenderer extends DefaultTableCellRenderer {

JLabel lbl = new JLabel();

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
lbl.setIcon((ImageIcon) value);
return lbl;
}
}



اقا توی سطرهای زیاد برای یک Jtable سرعت برنامه رو به شدت میاره پایین میشه کاریش کرد که سرعت برنامه پایین نیاد منظورم اینه که میشه کلاس ImageRenderer توی یک ترد تعریف بشه؟!!!!
و اینکه اگر برنامه چندین تب داشته باشه و این جدول توی یکی از تبها باشه سرعت برنامه اینقدر میاد پایین که دیگه نمیشه توی تبهای دیگه حرکت کرد ایا میشه تبها رونیزتوی ترد تعریف کرد موقعی که statechanged میشن چی کار کنم به نظر خودت؟ این عکس گذاشتن توی Jtable کل سرعت برنامه رو میگیره توی سطرهای زیاد.