如下代码所示,我在表格中的一个单元格中添加了一个面板,上面有一个按钮添加了监听事件。但现在鼠标点击上面的按钮时没反应,好像是鼠标无法获取面板中的组件。不知道怎么解决,恳求各位高手指点一下,不胜感激。
代码如下:
- Java code
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;public class TableDemo extends JFrame { private String[] columnNames = {"姓 名", "操作"};//记录表格的列名 JTable table; public TableDemo() { Container cp = this.getContentPane(); JPanel panel = new JPanel(); table = this.createJTable(columnNames); table.getColumnModel().getColumn(1).setCellRenderer(new PanelTableCellRender());//让第二列显示一个特定的面板 DefaultTableModel model = (DefaultTableModel) this.table.getModel(); model.addRow(new Object[] {"Zidane", new PanelDemo()}); model.addRow(new Object[] {"Henry", new PanelDemo()}); JScrollPane scrollPane = new JScrollPane(table); panel.setSize(300, 200); panel.add(scrollPane); cp.add(panel); setVisible(true); setBounds(300, 200, 500, 300); } /** * 新建一个JTable对象 * @param list * @param columnNames * @return */ public JTable createJTable(String columnNames[]) { DefaultTableModel model = new DefaultTableModel(); for(int i = 0; i < columnNames.length; i++) { model.addColumn(columnNames[i]); } JTable temporaryTable = new JTable(model); temporaryTable.setFont(new Font("微软雅黑", Font.ROMAN_BASELINE, 23)); temporaryTable.getTableHeader().setBackground(Color.MAGENTA); temporaryTable.getTableHeader().setFont(new Font("微软雅黑", Font.BOLD, 20)); temporaryTable.setRowHeight(75); return temporaryTable; } /** * 该类实现了表格中“操作”那一列单元格的绘制 * @author lxb 2011-08-24 */ class PanelTableCellRender extends PanelDemo implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (hasFocus) setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); else setBorder(null); return this; } } /** * @param args */ public static void main(String[] args) { TableDemo demo = new TableDemo(); }}
- Java code
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PanelDemo extends JPanel implements ActionListener { JButton button; JLabel viewLabel; public PanelDemo() { button = new JButton("编辑"); button.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 18)); button.addActionListener(this); viewLabel = new JLabel(); viewLabel.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 18)); viewLabel.setSize(80, 40); this.add(button); this.add(viewLabel); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == button) { button.setBackground(Color.magenta); viewLabel.setText("编辑!"); } }}
------解决方案--------------------
用的字体是微软雅黑的,这个跨平台使用可能会有影响的
------解决方案--------------------
Swing很久没用了,帮顶一个
------解决方案--------------------
学习下哈