标签: tablecellrenderer

更改JTable中行的背景颜色

我有一个有3列的JTable.我已经设置了TableCellRenderer所有3列这样的(可能不是很有效?).

 for (int i = 0; i < 3; i++) {
     myJTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
 }
Run Code Online (Sandbox Code Playgroud)

getTableCellRendererComponent()返回一个随机的背景颜色为每行一个组件.
在程序运行时如何将背景更改为其他随机颜色?

java jtable tablecellrenderer

20
推荐指数
3
解决办法
10万
查看次数

如何在JTable单元中单击JButton?

我有一个带有自定义单元格渲染器的JTable.该单元格是一个包含JTextField和JButton的JPanel.JTextField包含一个整数,当用户单击JButton时,应该增加整数.

问题是当我在JTable单元格中使用它时,无法单击JButton.如何使其可点击?

在此输入图像描述

这是我的测试代码:

public class ActiveTable extends JFrame {

    public ActiveTable() {
        RecordModel model = new RecordModel();
        model.addRecord(new Record());
        JTable table = new JTable(model);
        EditorAndRenderer editorAndRenderer = new EditorAndRenderer();
        table.setDefaultRenderer(Object.class, editorAndRenderer);
        table.setDefaultEditor(Object.class, editorAndRenderer);
        table.setRowHeight(38);

        add(new JScrollPane(table));
        setPreferredSize(new Dimension(600, 400));
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Active Table");
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ActiveTable();
            }
        });
    }

    class RecordModel extends AbstractTableModel {

        private final List<Record> records = new ArrayList<Record>();

        @Override
        public int getColumnCount() …
Run Code Online (Sandbox Code Playgroud)

java swing jtable jbutton tablecellrenderer

16
推荐指数
2
解决办法
3万
查看次数

如何使用Renderer for TableHeader

甚至我也阅读并测试了@kleopatra的答案

在此输入图像描述

在此输入图像描述

在此输入图像描述

来自SSCCE

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class SelectedTableHeader {

    private JFrame frame = new JFrame("Table Demo");
    private JTableHeader header;
    private Object selectedColumn = null;
    private String[] columnNames = {"String", "Integer", "Float", "Double", "Locale & Double", "Boolean"};
    private Object[][] data = {
        {"aaa", new Integer(12), new Float(12.15), new Double(100.05), new Double(12.05), true},
        {"bbb", new Integer(5), new Float(7.154), new Double(6.1555), new Double(417.55), false},
        {"CCC", new Integer(92), …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablecellrenderer jtableheader

14
推荐指数
1
解决办法
9262
查看次数

如何在DefaultTableModel/JTable中合并单元格?

我搜索了很多并得到了这个Q的答案.但是他们中的许多人都提到了404错误的链接.我想像这样制作表格:

要合并的单元格数不固定

java中有没有这方面的方法?

java swing jtable tablecellrenderer jtableheader

13
推荐指数
2
解决办法
2万
查看次数

如何在swing中实现动态GUI

首先,抱歉发布一些可能有点过于具体的内容,但我对Swing不是很有经验,似乎无法找到符合我需求的好例子.

所以我试图找出实现动态GUI的最佳方法,以便在Swing中选择过滤条件:

GUI的样机实现

底层模型是一个类,其中包含可以否定的标准列表(即应用NOT前缀),以及指示这些标准是否应与AND或OR组合的属性.

GUI将允许用户添加,更改或删除标准,并选择组合运算符(和/或).第一个标准自然没有组合选择器,第三个和后续标准将简单地使用与第二个标准相同的组合运算符.

右侧的X按钮将用于删除标准.按下"添加"按钮后,将在底部添加一个新的组件行.随着更改,这些将反映在基础模型中.

当然,我可以通过简单地将组件添加到JPanel然后相应地更新模型来实现"原始",但我更喜欢更简洁的解决方案,例如TableModel提供的解决方案.

所以我想知道一个带有自定义TableModel和TableCellRenderer/Editor的表是否是最好的方法,或者是否有更好的方法来实现这样的东西.如果table确实是最好的方法,我会很感激指出如何使用TableCellRenderers或-Editors来实现这一目标.

提前致谢.

java swing tablecelleditor tablecellrenderer tablemodel

12
推荐指数
1
解决办法
1万
查看次数

TableCellRenderer以及如何在不使用JTable.repaint()的情况下刷新单元格背景

在此输入图像描述在此输入图像描述在此输入图像描述

我的SSCCE工作正常,重新粉刷 JTable.repaint()

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class MyTableAndRenderer {

    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();
    private String[] items = {"Item 1", "Item 2", "Item 3", "Item 4"};
    private DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(items);
    private JComboBox combo = new JComboBox(comboBoxModel);
    private JPanel panel1 …
Run Code Online (Sandbox Code Playgroud)

java swing background jtable tablecellrenderer

12
推荐指数
1
解决办法
2万
查看次数

为什么我的Java自定义单元格渲染器在选择行/单元格时不显示高亮显示?

我有一个自定义单元格渲染器,用于单元格进行自动换行,以便可以读取更多内容.这是代码:

import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;

public class TextWrapCellRenderer extends JTextArea implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    public TextWrapCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        setMargin(new Insets(0, 5, 0, 5));
        setSelectionColor(Color.GREEN);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:正确使用单元格渲染器,但是当用户在JTable中选择一行时,它仅显示非自定义渲染单元格的突出显示.突出显示该行的所有其他单元格.这只留下一个带有白色背景的单元格,而行的其余部分则为蓝色(在我的情况下)作为突出显示的背景颜色.

java jtable tablecellrenderer

10
推荐指数
1
解决办法
1万
查看次数

如何使用自定义JTable单元格编辑器和单元格渲染器

我创建了一个带有自定义表格渲染和自定义单元格编辑器的JTable,它可以在图像中显示结果

在此输入图像描述

我使用扩展JPanel的单独类创建了第一个表格单元格中显示的面板.并将表值添加为,

        tbl.setCellEditor(new customCell());
        tbl.getColumnModel().getColumn(0).setCellRenderer(new customCell());

        DefaultTableModel dtm = (DefaultTableModel) tbl.getModel();

        Vector v = new Vector();
        v.add(new Panel());
        v.add("Test");
        dtm.addRow(v);

        v.clear();
        v.add(new Panel());
        v.add("Test 2");
        dtm.addRow(v);
Run Code Online (Sandbox Code Playgroud)

这是我的表自定义类来创建这个表,

class customCell extends DefaultTableModel implements TableCellRenderer, TableCellEditor {

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            Panel p = new Panel();            
            table.setRowHeight(row, p.getHeight());
            return p;
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

            return new Panel();
        }

        public Object getCellEditorValue() …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablecelleditor tablecellrenderer

10
推荐指数
2
解决办法
5万
查看次数

Scala中的惯用表格单元格渲染器

我一直在使用传统的Java TableCellRenderer方法scala.swing.Table在我在桌面上声明我的渲染器的地方提供渲染器TableColumnModel.这个代码看起来像:

val myTable = new Table {
  lazy val tcm = initColumnModel
  peer.setColumnModel(tcm)

  override 
  protected def rendererComponent(sel: Boolean, foc: Boolean, row: Int, col: Int) = {
    //GET THE VALUE FROM THE TableModel
    val value = model.getValueAt(
                        peer.convertRowIndexToModel(row), 
                        peer.convertColumnIndexToModel(col))
    //GET THE RENDERER FROM THE ColumnModel
    val renderer = tcm.getColumn(col).getCellRenderer
    //WRAP IN A COMPONENT
    Component.wrap(renderer.getTableCellRendererComponent(
                        peer, 
                        value, 
                        sel, 
                        foc, 
                        row, 
                        col).asInstanceOf[JComponent])
   }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎有内存泄漏 - 大概是因为我正在为表中的每个单元创建一个新的Component实例(大约30k行).当然,当我用一个JTable(使用完全相同的数据模型)替换我的scala表时,我的内存泄漏就消失了.

因此,我的问题是,当重写rendererComponent方法时人们使用什么样的代码,假设一个人拥有自己的单元格渲染器?

swing scala jtable tablecellrenderer

9
推荐指数
1
解决办法
1893
查看次数

JTable Cell Renderer

我正在关注我发现的一些代码,(是的,我理解它是如何工作的)它来自这里:Code Link

如果单元格值设置为"黄色",我正在尝试设置单元格前景色

这是我的代码:

public class Board extends JPanel{

private static final long serialVersionUID = 1L;

int boardHeight = 20;
int boardWidth = 10;

JTable table;

public Board() {
    table = new JTable(this.boardHeight, this.boardWidth);
    table.setDefaultRenderer(String.class, new BoardTableCellRenderer());
    table.setFocusable(false);
    table.setShowGrid(false);
    table.setRowMargin(0);
    table.setIntercellSpacing(new Dimension(0,0));
    table.setRowSelectionAllowed(false);
    table.setVisible(true);
    this.add(table);
    this.setPreferredSize(new Dimension(table.getPreferredSize().width, (table.getPreferredSize().height + 85)));
}

public void paint(Graphics g) {
    table.setRowHeight(20);
    for (int x = 0; x < this.table.getColumnCount(); ++x) {
        TableColumn col = this.table.getColumnModel().getColumn(x);
        col.setPreferredWidth(20);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

还有Cell Renderer

public class …
Run Code Online (Sandbox Code Playgroud)

java swing jtable tablecellrenderer

9
推荐指数
1
解决办法
6万
查看次数