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); } }
效果如下:
相关推荐
- `JTable` 显示和编辑表格数据。 - `JTree` 展示层次结构数据。 - `JOptionPane` 提供简单的对话框,如消息框和确认框。 - `JSeparator` 在菜单项或工具栏中创建分隔线。 5. **布局管理** Swing 提供了多种...
第二十六章"Swing表格源码"深入探讨了如何利用JTable来高效地显示和操作表格数据。 首先,JTable是一个非常灵活的组件,能够根据提供的数据模型动态生成表格。数据模型通常是DefaultTableModel或AbstractTableModel...
在Java Swing中,`JTable`是一个非常重要的组件,用于展示二维数据表格。在这个特定的示例工程中,我们探讨了如何在`JTable`中使用自定义数据类型,特别是将Boolean类型的数据呈现为Checkbox的形式,同时根据...
### Java Swing JTable 经典列设置与表格颜色设置详解 #### 一、概述 本文档将详细介绍如何在Java Swing框架下使用`JTable`组件进行经典列设置以及表格颜色的自定义设置,并通过一个实际的例子展示如何实现这些...
1. **表格组件**:JIDE Grids提供了增强的表格组件,支持复杂的数据绑定、排序、过滤、分页等功能。它还允许自定义单元格渲染器和编辑器,使得数据显示和编辑更加灵活。 2. **表单组件**:JIDE Forms包含了一组高级...
- **javax.swing.colorchooser**:支持颜色选择器组件。 - **javax.swing.event**:定义了事件和监听器类。 - **javax.swing.filechooser**:支持文件选择器组件。 - **javax.swing.plaf**:定义了用户界面代理类的...
《MintChime-Editor:Java Swing 构建的多语言图形化代码编辑器》 MintChime-Editor是一款专为程序员设计的图形化代码编辑器,它以Java Swing库为基础开发,提供了丰富的功能和良好的用户体验。这款编辑器不仅支持...
Java Swing中的JTable组件是用于在图形用户界面(GUI)中展示二维表格数据的重要工具。在给定的文档中,作者展示了如何在实际应用中设置JTable的列和行颜色,特别是根据特定列的数据来改变行的颜色。以下是对文档...
10. JTable:用于显示二维数据的表格,可以编辑和排序数据。 11. JScrollPane:当组件的内容超过可视区域时,`JScrollPane`提供滚动功能。 在Swing应用中,布局管理是非常重要的一环。Swing支持多种布局管理器,如...
本资源"利用Swing开发的JAVA常用组件代码fprod-common-7.3.rar"提供了使用Swing开发的一些常见组件的示例代码,这将有助于理解和实践如何在Java程序中创建和操作用户界面。 Swing提供了许多组件,它们是构建用户...
通过分析和学习这些源码,开发者可以掌握Swing组件的高级特性,如自定义颜色、图标、字体,以及如何实现复杂的交互逻辑。 例如,一个漂亮的Swing组件可能使用了`LookAndFeel` API来自定义组件的外观,使其符合特定...
Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个工具包,它是对早期抽象窗口工具包(AWT)的扩展。Swing 提供了更丰富的组件集和更好的跨平台一致性,使得开发者能够创建美观且功能强大的桌面应用...
`JTable`是Swing中用于显示和编辑二维数据的组件,它以表格的形式展示数据。`JTable`并不直接存储数据,而是作为数据模型的视图,这意味着你需要提供数据源,通常是`DefaultTableModel`或自定义的`TableModel`。通过...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据集,通常用于创建用户界面中的表格。在一些复杂的应用场景中,我们可能需要实现更高级的功能,如复杂的表头和跨行列表体。这个主题主要关注如何...
通过以上分析可以看出,本案例提供了一个简单的示例,展示了如何使用Java Swing中的`JColorChooser`组件来实现颜色的选择功能。这种方法非常适合于需要用户交互选择颜色的场景,如图像编辑软件或UI设计工具等。此外...
6. **实际应用示例**:分析或编写一个简单的Swing应用,展示如何实现摇摆文字效果,并将该效果保存到iText生成的PDF中。这可以帮助读者更好地理解这些技术的实际运用。 7. **优化与性能**:讨论如何优化动画性能,...
在Swing中,`JTable`是一个非常强大的组件,用于展示和编辑表格数据。为了实现动态生成输入框,我们可以通过自定义`TableCellRenderer`来达到目的,即在每个单元格中显示不同的组件。下面的代码示例展示了如何为`...
Swing 还支持拖放功能、国际化、以及丰富的组件,如表格(`JTable`)、树(`JTree`)、列表(`JList`)和滚动面板(` JScrollPane`)。这些组件允许你创建更复杂的用户界面,比如数据查看和编辑。 Swing 提供了 JTabbedPane...
《Java2图形设计卷II:Swing》是一本专注于Java GUI编程的专业书籍,其配套光盘源码提供了丰富的示例代码,帮助读者深入理解和实践Swing库在Java2平台中的应用。Swing是Java Standard Edition (Java SE) 中用于构建...
Swing 提供了一系列预定义的组件,如按钮(JButton)、文本框(JTextField)、表格(JTable)和菜单(JMenu),这些组件使得开发者能够构建出功能丰富的用户界面。在宠物管理系统中,可能包括了添加、编辑、删除宠物...