`

【转】-swing表格示例-颜色编辑

 
阅读更多
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);
    }
}

 

效果如下:

  • 大小: 15.7 KB
分享到:
评论

相关推荐

    JavaSwing界面设计(所有控件及示例)

    - `JTable` 显示和编辑表格数据。 - `JTree` 展示层次结构数据。 - `JOptionPane` 提供简单的对话框,如消息框和确认框。 - `JSeparator` 在菜单项或工具栏中创建分隔线。 5. **布局管理** Swing 提供了多种...

    Java SE 6.0编程指南 26_第二十六章 Swing表格源码

    第二十六章"Swing表格源码"深入探讨了如何利用JTable来高效地显示和操作表格数据。 首先,JTable是一个非常灵活的组件,能够根据提供的数据模型动态生成表格。数据模型通常是DefaultTableModel或AbstractTableModel...

    JTable使用自定义数据类型示例工程

    在Java Swing中,`JTable`是一个非常重要的组件,用于展示二维数据表格。在这个特定的示例工程中,我们探讨了如何在`JTable`中使用自定义数据类型,特别是将Boolean类型的数据呈现为Checkbox的形式,同时根据...

    java Jtable 经典列设置+表格颜色.docx

    ### Java Swing JTable 经典列设置与表格颜色设置详解 #### 一、概述 本文档将详细介绍如何在Java Swing框架下使用`JTable`组件进行经典列设置以及表格颜色的自定义设置,并通过一个实际的例子展示如何实现这些...

    Java Swing 教程

    - **javax.swing.colorchooser**:支持颜色选择器组件。 - **javax.swing.event**:定义了事件和监听器类。 - **javax.swing.filechooser**:支持文件选择器组件。 - **javax.swing.plaf**:定义了用户界面代理类的...

    MintChime-Editor:一个图形化的代码编辑器,带有多语言的选项卡和语法高亮,用 Java Swing 编写

    《MintChime-Editor:Java Swing 构建的多语言图形化代码编辑器》 MintChime-Editor是一款专为程序员设计的图形化代码编辑器,它以Java Swing库为基础开发,提供了丰富的功能和良好的用户体验。这款编辑器不仅支持...

    基于java的开源的Swing组件 JIDE.zip

    1. **表格组件**:JIDE Grids提供了增强的表格组件,支持复杂的数据绑定、排序、过滤、分页等功能。它还允许自定义单元格渲染器和编辑器,使得数据显示和编辑更加灵活。 2. **表单组件**:JIDE Forms包含了一组高级...

    javaJtable经典列设置+表格颜色.doc

    Java Swing中的JTable组件是用于在图形用户界面(GUI)中展示二维表格数据的重要工具。在给定的文档中,作者展示了如何在实际应用中设置JTable的列和行颜色,特别是根据特定列的数据来改变行的颜色。以下是对文档...

    swing example

    10. JTable:用于显示二维数据的表格,可以编辑和排序数据。 11. JScrollPane:当组件的内容超过可视区域时,`JScrollPane`提供滚动功能。 在Swing应用中,布局管理是非常重要的一环。Swing支持多种布局管理器,如...

    利用Swing开发的JAVA常用组件代码

    本资源"利用Swing开发的JAVA常用组件代码fprod-common-7.3.rar"提供了使用Swing开发的一些常见组件的示例代码,这将有助于理解和实践如何在Java程序中创建和操作用户界面。 Swing提供了许多组件,它们是构建用户...

    几个漂亮的SWING组件(源代码)

    通过分析和学习这些源码,开发者可以掌握Swing组件的高级特性,如自定义颜色、图标、字体,以及如何实现复杂的交互逻辑。 例如,一个漂亮的Swing组件可能使用了`LookAndFeel` API来自定义组件的外观,使其符合特定...

    JavaSwing界面设计(所有控件及示例).ppt

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个工具包,它是对早期抽象窗口工具包(AWT)的扩展。Swing 提供了更丰富的组件集和更好的跨平台一致性,使得开发者能够创建美观且功能强大的桌面应用...

    swing基础问题解答

    `JTable`是Swing中用于显示和编辑二维数据的组件,它以表格的形式展示数据。`JTable`并不直接存储数据,而是作为数据模型的视图,这意味着你需要提供数据源,通常是`DefaultTableModel`或自定义的`TableModel`。通过...

    调色板显示,配置颜色的调色板 获取颜色的调色板

    通过以上分析可以看出,本案例提供了一个简单的示例,展示了如何使用Java Swing中的`JColorChooser`组件来实现颜色的选择功能。这种方法非常适合于需要用户交互选择颜色的场景,如图像编辑软件或UI设计工具等。此外...

    swing-zing-itext

    6. **实际应用示例**:分析或编写一个简单的Swing应用,展示如何实现摇摆文字效果,并将该效果保存到iText生成的PDF中。这可以帮助读者更好地理解这些技术的实际运用。 7. **优化与性能**:讨论如何优化动画性能,...

    swing 动态生成

    在Swing中,`JTable`是一个非常强大的组件,用于展示和编辑表格数据。为了实现动态生成输入框,我们可以通过自定义`TableCellRenderer`来达到目的,即在每个单元格中显示不同的组件。下面的代码示例展示了如何为`...

    复杂JTable(复杂表头、跨行列表体)

    在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据集,通常用于创建用户界面中的表格。在一些复杂的应用场景中,我们可能需要实现更高级的功能,如复杂的表头和跨行列表体。这个主题主要关注如何...

    swing代码参考

    Swing 还支持拖放功能、国际化、以及丰富的组件,如表格(`JTable`)、树(`JTree`)、列表(`JList`)和滚动面板(` JScrollPane`)。这些组件允许你创建更复杂的用户界面,比如数据查看和编辑。 Swing 提供了 JTabbedPane...

    《Java2图形设计卷II:Swing》配套光盘源码

    《Java2图形设计卷II:Swing》是一本专注于Java GUI编程的专业书籍,其配套光盘源码提供了丰富的示例代码,帮助读者深入理解和实践Swing库在Java2平台中的应用。Swing是Java Standard Edition (Java SE) 中用于构建...

    Java+Swing+Txt实现宠物管理系统

    Swing 提供了一系列预定义的组件,如按钮(JButton)、文本框(JTextField)、表格(JTable)和菜单(JMenu),这些组件使得开发者能够构建出功能丰富的用户界面。在宠物管理系统中,可能包括了添加、编辑、删除宠物...

Global site tag (gtag.js) - Google Analytics