呵呵这个问题我也碰到。我是把JComboBox进行改造。也就说把它里面的下拉框去掉。不知道这个对你又帮助否
解决方案 »
- 谁有这样的开发框架
- org.hibernate.exception.SQLGrammarException (急)
- html の属性 locale は無効です
- 【散分】不学java web开发了,886
- wsdd里怎么Mapping java.sql.TimeStamp?
- 大家好,我想问一个很简单的问题
- struts+hiberate如何多表查询?
- struts如何检查表单输入数据必须为数字(100分)
- 用jb7+wl7.0开发部署好一个sessionbean,测试程序成功,把测试程序拿到客户端运行出错?急!!!
- 项目启动Error creating bean with name 'org.springframework.transaction.annotation.An
- 发邮件应用程序打成jar包后运行异常。 求救!急!!!
- 如何在JTable上实现鼠标右键功能
我现在自己做了CellRenderer,使用JPanel放置一个JLabel和一个JButton来实现
但是,首先JButton不能相应事件
其次,此行被选中时,这个cell没有被涂色
希望有更好的办法,望高手赐教
btnArrow.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent event) {
Object object = event.getSource();
if (object == btnArrow) {
// 你的具体处理
}
}
});
我不是用这个的,
我用的是class MyCellRenderer extends DefaultCellRenderer
里面用一个JPanel放入一个JLabel和一个JButton,
这样子外观就出来了,
但是我那个JButton 已经addActionListener了
public void actionPerformed(ActionEvent e)
{
System.out.println("ok");
}
可是按按钮却没有任何响应,怎么办?????
这么久了,难道csdn没什么高手?!!!!
class MyCellRenderer extends JPanel implements TableCellEditor, ActionListener
老样子,不能响应
监听器有注册,绝对不是疏忽所致
无奈,到处搜索,现得到的最有用的信息如下:You have a fundamental misunderstanding of rendering.The component returned from a cell renderer is merely
"rubber stamped" or painted into the component using
the cell renderer. The renderer component is NOT
actually placed into the component using the cell
renderer.In order to do what you want to do you need to implement
a cell editor.Also, note that DefaultTableCellRenderer *extends* JLabel.
The getTableCellRendererComponent returns a JLabel, which
is actually *this*.Your cell renderer (or editor) should NOT create a new
component each time getTableCellRenderer() is called. It
should re-use one instance of each type of component that
might be returned, modifying it as needed, before returning
it. I cannot say exactly why, but if you don't heed this
advice, your code will have a memory leak, and your JVM
could eventually run out of memory.但是不知道怎么写这个CellEditor,千万请高手相助!!!
1, 利用你写好的包含Label和Button的Renderer. 注意, 鼠标监听器不是加载在Renderer上的
2, 在table上加载鼠标监听器, 捕捉到事件以后用
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
方法获取到点击的行和列, 如果是你需要的那一列则继续, 否则退出.
Rectangle rect = table.getCellRect(row, column, true);
获取这个Renderer的坐标和大小, 然后将鼠标的坐标换算到Cell里面, 这个相信应该没有问题吧.
获取到最终的坐标以后判断是否在button的坐标范围内, 如果在的话, 弹出对话框.
public class ColorEditor extends AbstractCellEditor implements TableCellEditor {
private JLabel label = new JLabel(); private Color color = null; public ColorEditor() {
} public Object getCellEditorValue() {
return color;
} public boolean isCellEditable(EventObject e) {
if (e instanceof MouseEvent) {
MouseEvent me = (MouseEvent) e;
JTable table = (JTable) e.getSource();
int row = table.rowAtPoint(me.getPoint());
int col = table.columnAtPoint(me.getPoint());
Color color = (Color) table.getValueAt(row, col); color = JColorChooser.showDialog(MainWindow.WINDOW_ANCESTOR,
"Color Chooser",
color);
if (color != null) {
this.color = color;
table.setValueAt(color, row, col);
}
}
return false;
} public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
return label;
}
}
这是一个颜色编译器, 当然这里是点到cell就可以了, 按照上次问答的方法同样可以实现你需要的效果
class MyTableCellEditor extends DefaultCellEditor implements ActionListener
{
JPanel _panel = new JPanel();
JLabel _label = new JLabel();
JButton _button = new JButton(); public MyTableCellEditor()
{
super(new JCheckBox());
_label.setBackground(Color.WHITE);
_button.setText("...");
_button.setPreferredSize(new Dimension(16, 8));
_button.addActionListener(this);
_panel.setBackground(Color.WHITE);
_panel.setLayout(new BorderLayout());
_panel.add(_label);
_panel.add(_button, BorderLayout.EAST);
}
public Object getCellEditorValue()
{
return null;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if(row == 6 && column == 1)
{
return _button;
}
return table.getDefaultEditor(Object.class).getTableCellEditorComponent(table, value, isSelected, row, column);
} public void actionPerformed(ActionEvent e)
{
System.out.println("ok");
}
}
class MyCellRenderer extends JPanel implements TableCellRenderer,ActionListener
{
JLabel _label = new JLabel();
JButton _button = new JButton();
public MyCellRenderer()
{
_label.setBackground(Color.WHITE);
_button.setText("...");
_button.setPreferredSize(new Dimension(16, 8));
_button.addActionListener(this);
setBackground(Color.WHITE);
setLayout(new BorderLayout());
add(_label);
add(_button, BorderLayout.EAST);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if(row == 6 && column == 1)
{
if(value != null )
{
String s = value.toString();
int pos = s.indexOf(MibNodeProp.DELIM);
if(pos > 0)
{
_label.setText(s.substring(0, pos));
s = s.substring(pos + MibNodeProp.DELIM.length());
}
setToolTipText(s);
}
if(isSelected)
{
setBackground(table.getSelectionBackground());
setForeground(table.getSelectionForeground());
}
else
{
setBackground(table.getBackground());
setForeground(table.getForeground());
}
return this;
}
return new ValueRenderer().getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
public void actionPerformed(ActionEvent e)
{
System.out.println("ok");
}
}怎么会不行?
table.setDefaultRenderer(cls, new MyCellRenderer());
table.getColumnModel().getColumn(1).setCellEditor(new MyTableCellEditor());外观显示正常,为什么就是不能响应。
Editor有什么问题吗?
有的话,请改正!谢谢啦!