`
lushuaiyin
  • 浏览: 705034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jtable 加入按钮等,一个实例

 
阅读更多

package com;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Polygon;

import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

public class EditableColorColumn {

public static void main(String args[]) {

Color choices[] = { Color.red, Color.orange, Color.yellow, Color.green,
Color.blue, Color.magenta };
ComboTableCellRenderer renderer = new ComboTableCellRenderer();
JComboBox comboBox = new JComboBox(choices);
comboBox.setRenderer(renderer);
TableCellEditor editor = new DefaultCellEditor(comboBox);

JFrame frame = new JFrame("Editable Color Table");
TableModel model = new ColorTableModel();
JTable table = new JTable(model);

TableColumn column = table.getColumnModel().getColumn(3);
column.setCellRenderer(renderer);
column.setCellEditor(editor);

JScrollPane scrollPane = new JScrollPane(table);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 150);
frame.setVisible(true);
}
}

class ComboTableCellRenderer implements ListCellRenderer, TableCellRenderer {
DefaultListCellRenderer listRenderer = new DefaultListCellRenderer();

DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer();

private void configureRenderer(JLabel renderer, Object value) {
if ((value != null) && (value instanceof Color)) {
renderer.setIcon(new DiamondIcon((Color) value));
renderer.setText("");
} else {
renderer.setIcon(null);
renderer.setText((String) value);
}
}

public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
listRenderer = (DefaultListCellRenderer) listRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
configureRenderer(listRenderer, value);
return listRenderer;
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
tableRenderer = (DefaultTableCellRenderer) tableRenderer
.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
configureRenderer(tableRenderer, value);
return tableRenderer;
}
}

class ColorTableModel extends AbstractTableModel {

Object rowData[][] = { { "1", "ichi - \u4E00", Boolean.TRUE, Color.red },
{ "2", "ni - \u4E8C", Boolean.TRUE, Color.blue },
{ "3", "san - \u4E09", Boolean.FALSE, Color.green },
{ "4", "shi - \u56DB", Boolean.TRUE, Color.magenta },
{ "5", "go - \u4E94", Boolean.FALSE, Color.pink }, };

String columnNames[] = { "English", "Japanese", "Boolean", "Color" };

public int getColumnCount() {
return columnNames.length;
}

public String getColumnName(int column) {
return columnNames[column];
}

public int getRowCount() {
return rowData.length;
}

public Object getValueAt(int row, int column) {
return rowData[row][column];
}

public Class getColumnClass(int column) {
return (getValueAt(0, column).getClass());
}

public void setValueAt(Object value, int row, int column) {
rowData[row][column] = value;
}

public boolean isCellEditable(int row, int column) {
return (column != 0);
}
}

class DiamondIcon implements Icon {
private Color color;

private boolean selected;

private int width;

private int height;

private Polygon poly;

private static final int DEFAULT_WIDTH = 10;

private static final int DEFAULT_HEIGHT = 10;

public DiamondIcon(Color color) {
this(color, true, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

public DiamondIcon(Color color, boolean selected) {
this(color, selected, DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

public DiamondIcon(Color color, boolean selected, int width, int height) {
this.color = color;
this.selected = selected;
this.width = width;
this.height = height;
initPolygon();
}

private void initPolygon() {
poly = new Polygon();
int halfWidth = width / 2;
int halfHeight = height / 2;
poly.addPoint(0, halfHeight);
poly.addPoint(halfWidth, 0);
poly.addPoint(width, halfHeight);
poly.addPoint(halfWidth, height);
}

public int getIconHeight() {
return height;
}

public int getIconWidth() {
return width;
}

public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(color);
g.translate(x, y);
if (selected) {
g.fillPolygon(poly);
} else {
g.drawPolygon(poly);
}
g.translate(-x, -y);
}
}

分享到:
评论

相关推荐

    Swing中JTABLE中添加JBUTTON控件

    要在`JTable`的单元格中插入`JButton`,我们通常需要创建一个自定义的`TableCellRenderer`和`TableCellEditor`。 1. **自定义`TableCellRenderer`**:渲染器决定单元格在视图中的外观。我们可以通过继承`...

    用于自己学习的文件,包括map容器的适用以及JTable组件

    你可以创建一个JTable实例,并提供一个TableModel来填充数据,这个模型可以是自定义的,以适应不同的数据源。JTable还支持行选择、排序、列调整等功能,可以通过监听事件来响应用户的交互行为。在实际应用中,JTable...

    java中JTable的应用】[参照].pdf

    在Java编程中,`JTable` 是Swing组件库中的一个关键部分,它用于创建和展示二维表格数据。`JTable`通常与`DefaultTableModel`一起使用,可以在GUI应用程序中展示和编辑数据。以下是对标题和描述中所提及的`JTable`在...

    Java经典编程源码基础例程300.zip

    实例040 使用直接插入法对数组排序 59 实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认...

    h_JAVA 2应用编程150例.rar

    实例74 实现一个简单的代理服务器 246 实例75 C/S结构的分布式运算 248 第7章 Java B/S结构编程 253 实例76 简单的Servlet程序 254 实例77 简单的留言簿 256 实例78 JSP+Java Bean的计数器 258 实例79 数据库查询 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

    Swing 的table显示代码

    在`MyTable.java`文件中,很可能是定义了一个`JTable`实例,并设置了自定义的数据模型。 2. **TableModel**: `TableModel`接口是`JTable`的数据源,它定义了如何获取和设置表格中的数据。通常,你需要实现这个接口...

    java应用软件程序设计

    242 实例74 实现一个简单的代理服务器 246 实例75 C/S结构的分布式运算 248 第7章 Java B/S结构编程 253 实例76 简单的Servlet程序 254 实例77 简单的留言簿 256 实例78 JSP+Java Bean的计数器 ...

    JDBC实验报告.doc

    代码中定义了一个名为`MyWindow`的类,包含了与数据库交互的控制类`DBControl`的实例以及用于展示数据的`JTable`模型`MyTableModel`。`MyWindow`类中包含了各种文本框、按钮和标签,用于用户交互。`main`方法启动GUI...

    Java swing实现学生信息管理系统源码.zip

    在学生信息管理系统中,开发者可能创建了一个或多个数据库表来存储学生信息,如`students`表,包含`id`(唯一标识)、`name`(姓名)、`age`(年龄)、`major`(专业)等字段。 为了将数据从数据库加载到JTable,...

    JAVA GUI+控制台 学生成绩管理系统.zip

    Java GUI(图形用户界面)与控制台结合的学生成绩管理系统是一个典型的桌面应用程序开发实例,主要利用了Java Swing库来创建交互式的用户界面,并通过控制台进行后台数据处理。在这个项目中,开发者需要掌握以下几个...

    java简单通讯录

    总之,【Java简单通讯录】是一个综合运用了Java编程、数据库操作、用户界面设计和交互处理的实例。开发者通过学习这个项目,可以提升对Java Swing、JDBC以及数据库管理的理解,同时也能掌握用户认证和数据管理的基本...

    eclipse swing例子收集

    标题 "eclipse swing例子收集" 暗示了这是一个关于使用Eclipse集成开发环境和Swing库进行Java GUI编程的资源集合。Swing是Java的一个图形用户界面(GUI)工具包,它提供了丰富的组件和功能来创建桌面应用程序。下面将...

    Swing写的图书管理系统.zip

    总结来说,"Swing写的图书管理系统"是一个综合运用了Swing组件、MVC设计模式、事件处理、数据持久化、文件I/O以及异步编程等多个Java GUI编程关键技术的实例。通过分析和理解这个系统,开发者可以深入学习Swing,并...

    java swing学生信息管理.zip

    Java Swing是Java GUI(图形用户界面)开发的一个重要库,用于构建桌面应用程序。在这个"Java Swing学生信息管理.zip"文件中,我们可以预期找到一个利用Swing构建的学生信息管理系统。这个系统可能包括添加、删除、...

    Java结课作业,基于swing和mysql的学生管理系统

    开发者通常会创建一个或多个表来存储数据,并通过SQL(结构化查询语言)进行数据的查询、插入、更新和删除操作。 在描述中提到的链接("https://blog.csdn.net/RP123123123/article/details/117596778")可能提供了...

Global site tag (gtag.js) - Google Analytics