spiderman200700
سه شنبه 29 شهریور 1390, 02:17 صبح
سلام به دوستان خوبم.
من یه JTable دارم که میخوام وقتی روی TableHeaderش کلیک میکنم،یه Icon داخل Colum مورد نظر set بشه.
من LookAndFeel فریمم رو با کد زیر عوض کردم.
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (InstantiationException e) {
} catch (ClassNotFoundException e) {
} catch (UnsupportedLookAndFeelException e) {
} catch (IllegalAccessException e) {
}
که باعث شده Tableم شبیه این بشه:
75526
کد های مربوط به MouseٍEvent برای Table اینه:
table = new JTable(model);
table.setRowHeight(25);
table.setFont(new Font("tahoma", 1, 12));
table.getTableHeader().setFont(new Font("tahoma", 1, 15));
table.setBackground(new Color(255, 223, 180));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setComponentOrientation(ComponentOrientation .RIGHT_TO_LEFT);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int colum = table.getTableHeader().columnAtPoint(e.getPoint()) ;
ImageIcon im = null;
im = new ImageIcon(Telephon.class.getResource("icons/up.png"));
SetIcon(colum, im, model.getColumnName(colum));
for (int i = 0; i < 10; i++) {
if (i == colum) {
continue;
}
SetIcon(i, null, table.getTableHeader().getColumnModel().getColumn( colum));
}
}
});
اینم متد SetIcon :
public void SetIcon(int col_index, ImageIcon icon, String name) {
table.getTableHeader().getColumnModel().getColumn( col_index).setHeaderRenderer(new iconRenderer());
table.getColumnModel().getColumn(col_index).setHea derValue(new txtIcon(name, icon));
}
اینم کلاس iconRenderer و txtIcon:
class iconRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row,
int column) {
txtIcon i = (txtIcon) obj;
if (obj == i) {
setText(i.text);
setFont(new Font("tahoma", 1, 15));
setIcon(i.imageIcon);
}
setBorder(UIManager.getBorder("Table.focusSelectedCellHighlightBorder"));
setHorizontalAlignment(JLabel.CENTER);
return this;
}
}
class txtIcon {
String text;
ImageIcon imageIcon;
txtIcon(String text, ImageIcon icon) {
this.text = text;
imageIcon = icon;
}
}
حالا مشکل اینه که وقتی من روی یکی از Columهای TableHeader کلیک میکنم تا یه Icon داخلش set بشه،Icon ست میشه،ولی Border مربوط به columها عوض میشه و شبیه به این میشه:
75527
من میخوام یه کاری کنم که بعد از کلیک بر روی Columها Border مربوط به اونا عوض نشه و مثل اول بمونه.
خودمو کشتم ، ولی نتونستم این کار رو بکنم.
اگه از دوستان کسی هست که این کار رو بلد باشه،لطفا کمکم کنه.
ممنون از همگی.
من یه JTable دارم که میخوام وقتی روی TableHeaderش کلیک میکنم،یه Icon داخل Colum مورد نظر set بشه.
من LookAndFeel فریمم رو با کد زیر عوض کردم.
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (InstantiationException e) {
} catch (ClassNotFoundException e) {
} catch (UnsupportedLookAndFeelException e) {
} catch (IllegalAccessException e) {
}
که باعث شده Tableم شبیه این بشه:
75526
کد های مربوط به MouseٍEvent برای Table اینه:
table = new JTable(model);
table.setRowHeight(25);
table.setFont(new Font("tahoma", 1, 12));
table.getTableHeader().setFont(new Font("tahoma", 1, 15));
table.setBackground(new Color(255, 223, 180));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setComponentOrientation(ComponentOrientation .RIGHT_TO_LEFT);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int colum = table.getTableHeader().columnAtPoint(e.getPoint()) ;
ImageIcon im = null;
im = new ImageIcon(Telephon.class.getResource("icons/up.png"));
SetIcon(colum, im, model.getColumnName(colum));
for (int i = 0; i < 10; i++) {
if (i == colum) {
continue;
}
SetIcon(i, null, table.getTableHeader().getColumnModel().getColumn( colum));
}
}
});
اینم متد SetIcon :
public void SetIcon(int col_index, ImageIcon icon, String name) {
table.getTableHeader().getColumnModel().getColumn( col_index).setHeaderRenderer(new iconRenderer());
table.getColumnModel().getColumn(col_index).setHea derValue(new txtIcon(name, icon));
}
اینم کلاس iconRenderer و txtIcon:
class iconRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row,
int column) {
txtIcon i = (txtIcon) obj;
if (obj == i) {
setText(i.text);
setFont(new Font("tahoma", 1, 15));
setIcon(i.imageIcon);
}
setBorder(UIManager.getBorder("Table.focusSelectedCellHighlightBorder"));
setHorizontalAlignment(JLabel.CENTER);
return this;
}
}
class txtIcon {
String text;
ImageIcon imageIcon;
txtIcon(String text, ImageIcon icon) {
this.text = text;
imageIcon = icon;
}
}
حالا مشکل اینه که وقتی من روی یکی از Columهای TableHeader کلیک میکنم تا یه Icon داخلش set بشه،Icon ست میشه،ولی Border مربوط به columها عوض میشه و شبیه به این میشه:
75527
من میخوام یه کاری کنم که بعد از کلیک بر روی Columها Border مربوط به اونا عوض نشه و مثل اول بمونه.
خودمو کشتم ، ولی نتونستم این کار رو بکنم.
اگه از دوستان کسی هست که این کار رو بلد باشه،لطفا کمکم کنه.
ممنون از همگی.