Java addMouseListener在标签上不起作用
我在Java addMouseListener在标签上不起作用,java,swing,jlabel,mouselistener,listcellrenderer,Java,Swing,Jlabel,Mouselistener,Listcellrenderer,我在DefaultTableCellRenderer中使用MouseSistner 标签应获得此标签=======================> public class CatCustTabRenderer extends DefaultTableCellRenderer implements TableCellRenderer { Icon iconGetDate = new ImageIcon(GUI_RentABook.class.getResource("/images/
DefaultTableCellRenderer
中使用MouseSistner
标签应获得此标签=======================>
public class CatCustTabRenderer extends DefaultTableCellRenderer implements
TableCellRenderer {
Icon iconGetDate = new ImageIcon(GUI_RentABook.class.getResource("/images/edit15.jpg"));
JButton button = new JButton(iconGetDate);
// setOpaque(true);
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JTableHeader header = table.getTableHeader();
header.setBackground(OwnConstants.SALTEGREY);
header.setForeground(Color.white);
table.getColumnModel().getColumn(0).setPreferredWidth(25);// 0 Numbers
table.getColumnModel().getColumn(1).setPreferredWidth(60);// 1 Cust-ID
table.getColumnModel().getColumn(2).setPreferredWidth(160);// 2 Customer
table.getColumnModel().getColumn(3).setPreferredWidth(50);// 3 ZIP
table.getColumnModel().getColumn(4).setPreferredWidth(100);// 4 City
table.getColumnModel().getColumn(5).setPreferredWidth(100);// 5 Street
table.getColumnModel().getColumn(6).setPreferredWidth(40);// 6 Str-#
table.getColumnModel().getColumn(7).setPreferredWidth(115);// 7 Phone
table.getColumnModel().getColumn(8).setPreferredWidth(170);// 8 Email
table.getColumnModel().getColumn(9).setPreferredWidth(110);// 9 Loan-ID
table.getColumnModel().getColumn(10).setPreferredWidth(16);// 10 Edit-Icon
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
String returnTTipp = "";
returnTTipp = "Edit customer values";
if (value instanceof ImageIcon)
{ label.setText(null);
label.setIcon((ImageIcon)value);
label.setToolTipText(returnTTipp);
System.out.println("Im RENDERER");
label.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
System.out.println("CLICKED");
}
});
}else {
label.setIcon(null);
label.setToolTipText(null);
}
if ((row % 2) == 1 && !isSelected) {
label.setBackground(OwnConstants.NAVAJOWHITE);
} else if ((row % 2) == 0 && !isSelected) {
label.setBackground(Color.WHITE);
}
return label;
}
tableCatCustom.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent ev) {
if (ev.getClickCount() == 1) {
JTable temp = (JTable) ev.getSource();
int rowPos = temp.getSelectedRow();
Object[] rowTemp = new Object[temp.getColumnCount()];
for (int i = 0; i < rowTemp.length; i++) {
txtCustID.setText((String) temp.getValueAt(rowPos, 1));
txtCustomer.setText((String) temp.getValueAt(rowPos, 2));
// Set LoanID
if ((String) temp.getValueAt(rowPos, 1) != null)
{
loanIDCust = (String) temp.getValueAt(rowPos, 1);
setLoanID();
}else{
lblCatMess.setForeground(Color.RED);
lblCatMess.setText("No CustomerID found!");
}
}
} else {
System.out.println("No row is selected correctly!");
}
}
}
此标签是在GUI类中实现的表的一部分。表[tableCatCustom
]还使用了一个MouseListener
。当我点击一行时,我得到它的值。但是,在第10行的位置
标签(图标)位于。图标应该有我已经实现的MouseListener
(见上文)
这里是表的MouseListener
public class CatCustTabRenderer extends DefaultTableCellRenderer implements
TableCellRenderer {
Icon iconGetDate = new ImageIcon(GUI_RentABook.class.getResource("/images/edit15.jpg"));
JButton button = new JButton(iconGetDate);
// setOpaque(true);
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JTableHeader header = table.getTableHeader();
header.setBackground(OwnConstants.SALTEGREY);
header.setForeground(Color.white);
table.getColumnModel().getColumn(0).setPreferredWidth(25);// 0 Numbers
table.getColumnModel().getColumn(1).setPreferredWidth(60);// 1 Cust-ID
table.getColumnModel().getColumn(2).setPreferredWidth(160);// 2 Customer
table.getColumnModel().getColumn(3).setPreferredWidth(50);// 3 ZIP
table.getColumnModel().getColumn(4).setPreferredWidth(100);// 4 City
table.getColumnModel().getColumn(5).setPreferredWidth(100);// 5 Street
table.getColumnModel().getColumn(6).setPreferredWidth(40);// 6 Str-#
table.getColumnModel().getColumn(7).setPreferredWidth(115);// 7 Phone
table.getColumnModel().getColumn(8).setPreferredWidth(170);// 8 Email
table.getColumnModel().getColumn(9).setPreferredWidth(110);// 9 Loan-ID
table.getColumnModel().getColumn(10).setPreferredWidth(16);// 10 Edit-Icon
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
String returnTTipp = "";
returnTTipp = "Edit customer values";
if (value instanceof ImageIcon)
{ label.setText(null);
label.setIcon((ImageIcon)value);
label.setToolTipText(returnTTipp);
System.out.println("Im RENDERER");
label.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
System.out.println("CLICKED");
}
});
}else {
label.setIcon(null);
label.setToolTipText(null);
}
if ((row % 2) == 1 && !isSelected) {
label.setBackground(OwnConstants.NAVAJOWHITE);
} else if ((row % 2) == 0 && !isSelected) {
label.setBackground(Color.WHITE);
}
return label;
}
tableCatCustom.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent ev) {
if (ev.getClickCount() == 1) {
JTable temp = (JTable) ev.getSource();
int rowPos = temp.getSelectedRow();
Object[] rowTemp = new Object[temp.getColumnCount()];
for (int i = 0; i < rowTemp.length; i++) {
txtCustID.setText((String) temp.getValueAt(rowPos, 1));
txtCustomer.setText((String) temp.getValueAt(rowPos, 2));
// Set LoanID
if ((String) temp.getValueAt(rowPos, 1) != null)
{
loanIDCust = (String) temp.getValueAt(rowPos, 1);
setLoanID();
}else{
lblCatMess.setForeground(Color.RED);
lblCatMess.setText("No CustomerID found!");
}
}
} else {
System.out.println("No row is selected correctly!");
}
}
tableCatCustom.addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent ev){
如果(ev.getClickCount()==1){
JTable temp=(JTable)ev.getSource();
int rowPos=temp.getSelectedRow();
Object[]rowTemp=新对象[temp.getColumnCount()];
对于(int i=0;i
}))
当我点击一行时,这个MouseListener
运行良好。但行中的is也应该是标签的MouseListener
(rowpos 10=图标)。此MouseListener
不起作用
我的错在哪里
致意
Wolfgang渲染器不是真正的组件。鼠标侦听器将无法在渲染器上工作
如果您想通过鼠标点击进行处理,则需要将MouseListener添加到JTable中。JTable API中有一些方法允许您将鼠标点转换为表中的特定单元格。Hi camickr,thx用于回答和提示。我会找到办法的。向WolfgangHi camickr致以最良好的问候,你知道如何在cloumn 10中获得每一行的单元格吗?我尝试了一些示例,但没有得到正确的结果。@user2788492,我不理解您的问题,也不理解您发布的代码?为什么你有一个循环。使用鼠标时,一次只能单击一个单元格。因此,您可以使用方法,
rowAtPoint(…),columnAtPoint(…)
来确定单击了哪一行/哪一列。然后你做你的处理。再次谢谢,给你小费!当做Wolfgang@user2788492如果问题得到了回答,那么就接受这个问题,这样人们就会知道你有答案。