求一份jtable的单元格中放置了按钮的代码。按钮实现了点击事件,并且有按钮有提示。以前下过一份java日历的源代码。
阿正写的。用的myeclipse工具。里面还有备忘录。 早段时间装系统文件都丢失了很想再参考下那份代码。可惜在网上搜索了很久没有搜索到。有点郁闷。不知道谁有那份代码?或者有类似的代码?帖一份给我好吗?
阿正写的。用的myeclipse工具。里面还有备忘录。 早段时间装系统文件都丢失了很想再参考下那份代码。可惜在网上搜索了很久没有搜索到。有点郁闷。不知道谁有那份代码?或者有类似的代码?帖一份给我好吗?
想参考下
addActionListener(new ActionListener());然后在监听实现里面加入public void actionPerformed(ActionEvent e){
String strActionCommand = e.getActionCommand();
if(strActionCommand.equals(String)
{
//响应事件
}
}
public class MyBtnRenderer extends JButton implements TableCellRenderer {
private static final long serialVersionUID = 9108456303675104321L; public MyBtnRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object object,
boolean isSelected, boolean hasFocus, int row, int column) {
setHorizontalAlignment(JButton.LEFT);
setHorizontalTextPosition(JButton.LEFT);
setVerticalTextPosition(JButton.BOTTOM);
setBorder(javax.swing.BorderFactory.createEtchedBorder());
setText( (object ==null)? "" : object.toString() );
return this;
}
}//-------------------------------------------------------
public class MyBtnEditor extends DefaultCellEditor {
private static final long serialVersionUID = -9072499029544974642L;
protected JButton btn;
private String text;
private boolean flag;
public MyBtnEditor(JTextField textField) {
super(textField);
btn = new JButton();
btn.setOpaque(true);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
} public Component getTableCellEditorComponent(JTable table, Object object,
boolean isSelected, int row, int column) {
text = (object ==null)? "" : object.toString();
btn.setText(text);
btn.setHorizontalAlignment(JButton.LEFT);
btn.setHorizontalTextPosition(JButton.LEFT);
btn.setVerticalTextPosition(JButton.BOTTOM);
flag = true;
return btn;
} public Object getCellEditorValue() {
return new String(text) ;
}
public boolean stopCellEditing() {
flag = false;
return super.stopCellEditing();
} protected void fireEditingStopped() {
super.fireEditingStopped();
}
}//--------------------调用---------
int vRow=10,columns=10;
List list; //// 我已经给list填充了数据
DefaultTableModel dtm=new DefaultTableModel(vRow, columns);
Iterator objectIt = list.iterator();
int i=0,j=0;
while (objectIt.hasNext()) {
TbObject object = (TbObject) objectIt.next();
dtm.setValueAt(object.getName());
j++;
if (j==columns) {
i++;
j=0;
}
}
final JTable table = new JTable(dtm);
table.getTableHeader().setVisible(false);
table.getTableHeader().setPreferredSize(new Dimension(0, 0));
table.setRowHeight(h);
table.setIntercellSpacing(new Dimension(5,5));
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.setCellSelectionEnabled(true);
for(int k=0;k<columns;k++){
table.getColumn(table.getColumnName(k)).setCellRenderer(new MyBtnRenderer());
table.getColumn(table.getColumnName(k)).setCellEditor(new MyBtnEditor(new JTextField()));
}
table.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
JOptionPane.showMessageDialog(table, table.getSelectedRow()+"/"+table.getSelectedColumn());
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
roomPanel.add(table,BorderLayout.CENTER);
} catch (Exception e) {
}
}
//如何获取jtable单元格里的按钮。给他加事件?
setHorizontalAlignment(JButton.LEFT);
setHorizontalTextPosition(JButton.LEFT);
setVerticalTextPosition(JButton.BOTTOM);
setActionCommand(name);
addActionListener(new ActionListener()); 这些过程全部放在工厂里面完成,然后直接使用这个工厂的产品就行了
public TextButton extends JButton{
public TextButton(String name){
super(name);
initialize(name);
} private void initialize(String name){
setHorizontalAlignment(JButton.LEFT);
setHorizontalTextPosition(JButton.LEFT);
setVerticalTextPosition(JButton.BOTTOM);
setActionCommand(name);
addActionListener(new ActionListener());
}
}
你最好写个类去实现ActionListener接口,然后在这个类中去实现事件
public void valueChanged(ListSelectionEvent e){
int myRow = table.getSelectedRow();
String field1 = (String) table.getValueAt(row, 1);
String field2 = (String) table.getValueAt(row, 2);
String field3 = (String) table.getValueAt(row, 3);
Integer field4 = (Integer) table.getValueAt(row, 4);
}
我直接在 MyBtnEditor 类 implements ActionListener btn.addActionListener(this); public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(btn, btn.getText());
}
事件是出来了但是我要根据按钮的颜色或者图片给事件添加相应的方法。
可我在调用的时候。
dtm.setValueAt(object.getName);
然后给jtabel
table.getColumn(table.getColumnName(k)).setCellRenderer(new MyBtnRenderer());
table.getColumn(table.getColumnName(k)).setCellEditor(new MyBtnEditor(new JTextField()));这样才把单元格变成按钮。
我怎么给按钮设置背景颜色呢?背景颜色要根据 object.getState 来设置。