标签: jtable

如何在DragAndDrop期间在Main-JTable上绘制RowHeader-JTable的Dropline?

我在JScrollPane的Viewport中使用第二个JTable来为主表构建RowHeader.主表上的DragAndDrop已禁用.在rowheader表上启用DnD.

如果用户启动了rowheader上的Drag,我想在主表上扩展绘制的rowheader下划线(图像中的黑线)(如图中的绿线).

维护人员的下线

有人对我有建议吗?
这是SSCCE:

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.DropMode;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.TransferHandler;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;


public class DNDLinePainterExampleMain extends JFrame {

  public DNDLinePainterExampleMain() {
    JTable mainTable = new JTable(4, 3);
    mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    JTable rowTable = new RowHeaderTable(mainTable);
    rowTable.setAutoscrolls(true);
    rowTable.setDragEnabled(true);
    rowTable.setTransferHandler(new RowHeaderTransferHandler());
    rowTable.setDropMode(DropMode.INSERT_ROWS);

    JScrollPane scrollPane = new JScrollPane(mainTable);
    scrollPane.setRowHeaderView(rowTable);
    scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
        rowTable.getTableHeader()); …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing drag-and-drop jtable

13
推荐指数
4
解决办法
1717
查看次数

如何在Swing中为JTable提供分页支持?

我在Swing Java中创建了一个GUI,其中我使用了JTable.Now我想通过使用分页将下一页信息显示在其中.我该怎么办?

java swing pagination jtable

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

正确地从(已排序的)JTable获取数据

我已经开发了一个基本的自定义JTableModel,如下所示

public class CustomTableModel extends DefaultTableModel {
  List<MyClass> data;
  public CustomTableModel(List<MyClass> data) {
    this.data = data;
  }

  public Class<?> getColumnClass(int columnIndex) {
    return MyClass.class;
  }

  public MyClass getValueAt(int rowIndex, int columnIndex) {
    return data.get(rowIndex);
  }

  // ...
}
Run Code Online (Sandbox Code Playgroud)

然后我使用基本的自定义JTableCellRenderer,如下所示

public class CustomTableCellRenderer extends JLabel implements TableCellRenderer {

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

    MyClass myClass = (MyClass)value;

    lbl.setText(myClass.getString());

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

我还有一个自定义JPanel,显示如下各种信息

public class MyPanel extends JPanel {
  private MyClass …
Run Code Online (Sandbox Code Playgroud)

java jtable

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

Java Swing - JTable中的多个列标题?

有没有办法在a中创建多个列标题JTable?我的意思是,通常只有一行,但我需要两个具有相同格式(标题),并组合其中一个标题的一些单元格.

我需要这样的东西:

Header0 |          Header123          | Header4
Header0 | Header1 | Header2 | Header3 | Header4

有什么办法吗?

java swing jtable

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

如何在编辑时选择JTable单元格中的所有文本

我想让我的可编辑JTable中的编辑器在开始编辑时选择单元格中的所有文本.我尝试了一些事情,都围绕从TableCellEditor.getTableCellEditorComponent方法返回的组件上调用JTextComponent.selectAll().我尝试过的所有事情都没有.

在我最近的尝试中,我改变了Swing教程中的SimpleTableDemo类,以使用调用selectAll方法的自定义TableCellEditor.在调试器中,我可以看到正在调用selectAll()方法,但是表仍然进入编辑模式而不选择单元格中的文本(或者可能在显示之前清除选择).该代码如下.谁能告诉我哪里出错了?

import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.text.JTextComponent;


import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class SimpleTableDemo extends JPanel {
    private boolean DEBUG = false;


    public SimpleTableDemo() {
        super(new GridLayout(1, 0));

        String[] columnNames = {"First Name",
                                "Last Name",
                                "Sport",
                                "# of Years",
                                "Vegetarian"};

        Object[][] data = {
                {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
                {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
                {"Sue", …
Run Code Online (Sandbox Code Playgroud)

java swing jtable

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

如何将图像插入JTable单元格

有人可以指出我正确的方向如何将图像添加到Java表格单元格.

java icons swing jtable

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

JTable隐藏和显示列

我想在表中添加一些列(Swing JTable).其中一些将具有默认大小(例如250),其他将被隐藏(因此它们的大小将为0).我用这个代码:

 model = new DefaultTableModel();
 table = new JTable(model);
 setAutoResizeMode(AUTO_RESIZE_OFF);
 for (int i = 1; i < COLUMN_NAMES.length; i++) {
    model.addColumn(COLUMN_NAMES[i]);
    if (show[i]) show(index);
    else hide(index);
 }
 ........

 private void hide(int index) {
    TableColumn column = getColumnModel().getColumn(index);
    column.setMinWidth(0);
    column.setMaxWidth(0);
    column.setWidth(0);
    column.setPreferredWidth(0);
    doLayout();
}

private void show(int index) {
    final int width = 250;
    column.setMinWidth(15);
    column.setMaxWidth(width);
    column.setWidth(width);
    column.setPreferredWidth(width);
    doLayout();
}
Run Code Online (Sandbox Code Playgroud)

问题是当显示表格时,显示所有列(没有隐藏),它们的大小不是250,但它们具有相同的大小.

我怎样才能得到想要的效果?

java swing jtable

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

行中的JTable重复值

我有一个JTable填充自定义DataModel(粘贴在下面),当我调用该populate()方法时,它似乎用重复数据填充表 - 每一行都反复填充相同的值.然而,仔细检查(通过简单地println()'数据'字段),数据模型没有错 - 它以我期望的格式保存正确的数据.是什么赋予了?

import java.util.ArrayList;    
import javax.swing.table.AbstractTableModel;

@SuppressWarnings("serial") // we don't expect this app to ever use serialized classes.  EVER.
public class CollectionDataModel extends AbstractTableModel {
    private ArrayList<ArrayList<String>> data;

    public CollectionDataModel() {
        data = new ArrayList<ArrayList<String>>();
    }

    @Override
    public int getColumnCount() {
        if(data.isEmpty()) return 0;
        return data.get(0).size();
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        if(rowIndex > getRowCount()) return null;
        if(columnIndex …
Run Code Online (Sandbox Code Playgroud)

java swing jtable

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万
查看次数

JScrollPane中的JTable,如何设置背景?

我用a JScrollPane来包装一个JTable.根据配置,有一些空间未被表占用.它被绘制为灰色(看起来它是透明的,你可以看到后面的组件).如何将此区域设置为某种颜色?

这是一个SSCCE来说明.

import java.awt.Color;
import java.util.Vector;

import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class DialogDemo extends JDialog {
    public static void main(final String[] args) {
        final DialogDemo diag = new DialogDemo();
        diag.setVisible(true);
    }

    public DialogDemo() {
        super();
        setTitle("SSCCE");

        final Vector<Vector<String>> rowData = new Vector<Vector<String>>();
        final Vector<String> columnNames = new VectorBuilder<String>().addCont("Property").addCont("Value");
        rowData.addElement(new VectorBuilder<String>().addCont("lorem").addCont("ipsum"));
        rowData.addElement(new VectorBuilder<String>().addCont("dolor").addCont("sit amet"));
        rowData.addElement(new VectorBuilder<String>().addCont("consectetur").addCont("adipiscing elit."));
        rowData.addElement(new VectorBuilder<String>().addCont("Praesent").addCont("posuere..."));

        final JTable table = new JTable(rowData, columnNames);
        JScrollPane pane = new JScrollPane(table);

        // ************* make …
Run Code Online (Sandbox Code Playgroud)

java swing background jtable jviewport

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