日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TableCellRenderer和TableCellEditor(一)

發(fā)布時(shí)間:2024/10/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TableCellRenderer和TableCellEditor(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?轉(zhuǎn)載:http://blog.sina.com.cn/s/blog_661a3fce0100mske.html 最近不少朋友問(wèn)我TableCellRenderer和TableCellEditor的用法,趁今天周末有空寫了幾個(gè)麻雀雖小五臟俱全的例子供大家參考。

簡(jiǎn)單來(lái)說(shuō): TableCellRenderer就是用來(lái)繪制展示當(dāng)前cell單元數(shù)值內(nèi)容的,你可以用文字、數(shù)值或者圖片來(lái)表示內(nèi)容,當(dāng)然最強(qiáng)大展示方式的就是通過(guò)自定義自己的renderer組件,通過(guò)Java2D來(lái)繪制各種天花亂墜的效果。

TableCellEditor主要是用來(lái)當(dāng)用戶點(diǎn)擊在具體cell時(shí)進(jìn)行編輯的組件,所以 TableCellEditor除了具有TableCellRenderer一樣的繪制功能外還可以進(jìn)行交互動(dòng)作,例如在cell上出現(xiàn)下拉框、勾選框甚 至通過(guò)按鈕彈出更復(fù)雜的對(duì)話框讓用戶進(jìn)行輸入編輯。
以下是在cell中嵌入start、stop兩個(gè)按鈕的表格,注意這里的renderer只是用來(lái)顯示效果,并沒(méi)有進(jìn)行交互動(dòng)作,真正進(jìn)行動(dòng)作的是當(dāng)你將鼠標(biāo)點(diǎn)擊在cell上時(shí),JTable定位上去的editor,所以不要徒勞在renderer上做點(diǎn)擊事項(xiàng)處理,renderer是不會(huì)接受到交互事項(xiàng)的,renderer只是個(gè)畫筆,你看到的start、stop按鈕只是這個(gè)畫筆畫出來(lái)的內(nèi)容,是虛的并沒(méi)有真正的組件在上面。


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableTest1 extends JFrame { ?JTable table;
?String[] states = new String[]{"stop", "stop", "stop"};
?
?// model
?class TableModel extends AbstractTableModel{
??public int getColumnCount() {
???return 2;
??}
??public int getRowCount() {
???return states.length;
??}
??public Object getValueAt(int rowIndex, int columnIndex) {
???if(columnIndex == 0){
????return states[rowIndex];
???}
???return null;
??}
???? public String getColumnName(int columnIndex) {
???if(columnIndex == 0){
????return "state";
???}else{
????return "operate";
???}
???? }
???? public boolean isCellEditable(int rowIndex, int columnIndex) {
???if(columnIndex == 0){
????return false;
???}else{
????return true;
???}
???? }
?}
?
?// cell editor
?class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener {
??int row;
??JTable table;
??JPanel panel;
??JButton start;
??JButton stop;
??Editor(){
???panel = new JPanel();
???panel.setLayout(new GridLayout(1, 2));
???start = new JButton("start");
???stop = new JButton("stop");
???start.addActionListener(this);
???stop.addActionListener(this);
???panel.add(start);
???panel.add(stop);
??}
???? public Object getCellEditorValue() {
???????? return null;
???? }
???? public Component getTableCellEditorComponent(JTable table,
????????????????????????????????????????????????? Object value,
????????????????????????????????????????????????? boolean isSelected,
????????????????????????????????????????????????? int row,
????????????????????????????????????????????????? int column) {
???? ?this.table = table;
???? ?this.row = row;
???? ?return panel;
???? }
????
??public void actionPerformed(ActionEvent e) {
???if(e.getSource() == start){
????states[row] = "start";
???}else{
????states[row] = "stop";
???}
???((AbstractTableModel)table.getModel()).fireTableCellUpdated(row, 0);
??}
??
?}
?
?// cell render
?class Renderer extends JComponent implements TableCellRenderer{
??JPanel panel;
??JButton start;
??JButton stop;
??Renderer(){
???panel = new JPanel();
???panel.setLayout(new GridLayout(1, 2));
???start = new JButton("start");
???stop = new JButton("stop");
???panel.add(start);
???panel.add(stop);
??}
??public Component getTableCellRendererComponent(JTable table, Object value,
????boolean isSelected, boolean hasFocus, int row, int column) {
???return panel;
??}
?}
?
?public TableTest1(){
??super("renderer and editor self-existent");
??table = new JTable(new TableModel());
??TableColumn tableColumn = table.getColumnModel().getColumn(1);
??tableColumn.setCellRenderer(new Renderer());
??tableColumn.setCellEditor(new Editor());
??
??????? this.getContentPane().setLayout(new BorderLayout());
??????? this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
??????? this.setSize(500, 300);
??????? this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?}
?public static void main(String[] args) {
??new TableTest1().show();
?} }

轉(zhuǎn)載于:https://www.cnblogs.com/gwq369/p/5363193.html

總結(jié)

以上是生活随笔為你收集整理的TableCellRenderer和TableCellEditor(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。