Tag: tablecellrenderer

如何为JTable中的特定行着色

我希望能够突出显示某些JTable行,具体取决于行本身的值。 例如,如果现有的qty < reorder level ,那么该行应该在JTable突出显示。 我知道有一个表方法tblItems.setSelectionBackground(Color.yellow); 在选择行时有效,但有没有类似的方法不依赖于被选中的行以使它们以不同的颜色显示? public class MyTableCellRenderer implements TableCellRenderer { @Override public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Object ob=table.getValueAt(row, column); if(ob.toString().equals(“yes”)){ //need to colour the entire row } return } }

在jTable中设置jCheckBox不可见

我有一个带有两列的jTable 。第一列设置为布尔值(用于复选框),第二列设置为字符串值。当我使用Netbeans ,复选框被添加到第一列的所有行中。 我试图仅为那些在第二列中具有值的行添加它。 我用代码试了一下, private class CustomCellRenderer extends DefaultTableCellRenderer { /* (non-Javadoc) * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ @Override public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) { Component rendererComp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,row, column); for(int i=row;i<jTable1.getRowCount();i++){ if(jTable1.getValueAt(i, 1)==null){ jTable1.setValueAt(true, i, 0); //checkbox.setOpaque(false); } } […]

包装线,右对齐,自动调整JTable中的行高

我编写了一个Java应用程序,我需要一个JTable类的对象,它具有一些特性: 自动包装线 正确对齐 自动调整行高(这意味着例如行的大小为25,但表中另一行的大小为50,内容大小为行) 渲染速度必须很高 但是我的代码不能快速完成并且没有完全的顶级function,我在最后一个问题中编写了我的应用程序的最小版本: 这是我的gui课程: import javax.swing.*; import java.awt.*; public class GUI extends JFrame { private BankTable table; private JScrollPane scrollPane; public GUI(){ super(“Bank Table”); JPanel contentPanel = new JPanel(); setContentPane(contentPanel); contentPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); setLayout(new BorderLayout()); setMinimumSize(new Dimension(1000,700)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); makeTable(); scrollPane = new JScrollPane(table); scrollPane.getVerticalScrollBar().setUnitIncrement(50); add(scrollPane,BorderLayout.CENTER); setVisible(true); } public void makeTable(){ String[][]data= new String[][]{{“0212670003009”, “ص […]

JXTable:对特定单元格而不是整列使用TableCellEditor和TableCellRenderer

我有一个6列的JXTable复合,其中两个是JCheckBox 。 我想有以下行为: 如果选中第一个复选框,则启用第二个复选框,可以检查或不检查。 如果未选中第一个复选框,则必须禁用并取消选中第二个复选框。 我用Photoshop编辑了一个图像以显示所需的结果: 对于CheckOne和CheckTwo列,我使用自定义TableCellEditor和TableCellRenderer : public class CheckBoxCellEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; private JCheckBox checkBox = new JCheckBox(); public CheckBoxCellEditor() { checkBox.setHorizontalAlignment(SwingConstants.CENTER); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { checkBox.setSelected(value==null ? false : (boolean)value); return checkBox; […]

JTable标题背景颜色

我正在尝试将背景颜色放在JTable标题上,但它似乎没有改变标题的颜色这是我的JTable的代码..我做错了什么? Color headerColor = new Color(25, 78, 132); itemTable = new JTable(){ public boolean isCellEditable(int row, int column) { return false; }; Color rowColor1 = new Color(99, 154, 206); Color rowColor2 = new Color(148, 186, 231); public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component stamp = super.prepareRenderer(renderer, row, column); if (row % 2 […]

使用具有不同根和节点类型的TreeTable

我有以下问题: 我希望有一个类似JTeeTable的表组件,除了根(下面的类)和树的节点不是同一类型。 例如,假设我有以下类: public final class Entry { private int id; private String title; private String notes; private List subEntryList; /** @see SubEntry*/ } public final class SubEntry{ private int id; private String title; private String notes; } 虽然这两个类看起来相似并且可能激发inheritance的情况, 但它们并不是那样相关的 。 可以把它想象成一辆带有汽车零件清单的车或带有演员名单的电影。 两个星期以来,我一直试图想办法在视觉上呈现上述内容。 我想过使用JTreeTable组件,但是当子条目(节点??)与条目(leaf ??)属于同一类型时,我所有的例子都是交叉显示用法。 我的想法到目前为止:看到如果我使用表,列将共享相同的名称,我认为我应该使用表和另一个表作为TableCellRenderer,然后双击父行支持显示/隐藏。 我不知道如何向前迈进…… 所以,如果您有任何想法我应该如何解决这个问题,请分享您的想法。 UPDATE //I finally managed to sort out […]

Java JTable禁用单个单元格选择边框高亮显示

我有一个JTable,每行有三列,见图: 出于某种原因,取决于我选择的列,我在上面的图像中得到它周围的小深蓝色边框(V140116554)。 我目前用它来选择整行: vTable.setRowSelectionAllowed(true); 我怎么能禁用它? 编辑: 添加了一个类: public class VisitorRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setBorder(noFocusBorder); return this; } } 并补充说: vTable.setDefaultRenderer(String.class, new VisitorRenderer()); 但仍然得到边界

如何向JTable添加空行?

是否有任何方法可以向jtable添加空行,其中第一列是布尔值,因此它不会显示自动生成的复选框? 我需要它来分隔行组。 我尝试使用下面的代码,但它不起作用: model.addRow(new Object[]{null,null,null,null});

具有HTML字符串的表格单元格不一致地呈现为多行

我表中一列的单元格是HTML字符串。 HTML用于提供一些颜色指示。 通常,列的宽度足以包含整个字符串。 但是当它还不够时,字符串很好地切割在单词边界上。 这是理想的行为。 使用默认的单元格渲染器。 我注意到偶尔会有一些与表的交互触发渲染器包装字符串。 据我所知,包装HTML字符串是JLabel的正常行为, DefaultTableCellRenderer从该行为派生。 不清楚的是,为什么这种行为如此不一致,是什么引发了它的偏差。 JLabel来回跳跃的原因是什么,好像它经常被重新测量一样? 有关示例,请参见附图。 要解决这个问题,我可以将添加到HTML字符串以防止换行,或者使用更复杂的渲染器来渲染彩色字符串。 但我想知道是否有办法让JLabel发挥出色。 我设法将整个案例简化为一个简单的例子。 我要重现的问题是单击各行以更改选择。 import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Locale; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; public class TestTable extends JPanel{ public TestTable() { setLayout(new BorderLayout()); Object[][] rows = { { “1 Lorem ipsum dolor […]

为什么我的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) […]