标签: jxtable

为什么JXTable在JTable不存在的情况下输入输入?

当我使用JXTable渲染和编辑我的数据时,CellEditors的一些输入会丢失.如果我单击JXTable-ColumnHeader的Resizing-Divider或更改JFrame的宽度,CellEditor将终止而不提交值.如果我使用JTable,则保存这些值.

我想使用JXTable因为它的其他功能,所以有没有办法修复JXTable?

Screenrecording

例:

package table.columnresize;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import org.jdesktop.swingx.JXTable;

/**
 * Demo of differing behaviour of JXTable and JTable. JXTable loses input in a TableCell where JTable persists
 * it.
 * <p>
 * <table border=1>
 * <tr>
 * <th></th>
 * <th>JXTable</th>
 * <th>JTable</th>
 * </tr>
 * <tr>
 * <td>Click on TableColumnHeader</td>
 * <td>saved</td>
 * <td>saved</td>
 * </tr>
 * <tr>
 * <td>Resizing with Divider of TableColumnHeader</td>
 * <td>lost</td>
 * <td>saved</td>
 * </tr>
 * <tr>
 * …
Run Code Online (Sandbox Code Playgroud)

java swing jtable swingx jxtable

8
推荐指数
1
解决办法
256
查看次数

Swing:表格单元格渲染不适用于JXTable?

我试图根据某些行项的值覆盖JXTable的突出显示颜色.这是一个示例,如果行项值有高亮显示为绿色getNumber() % 2 == 0.

它适用于JTable,但对于JXTable,看起来表格单元格渲染器不起作用,除非选择了相关的行.为什么它会这样,我该如何解决?

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

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import org.jdesktop.swingx.JXTable;
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.SortedList;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.swing.EventTableModel;

public class TableRendererExample {
    static public enum ItemKey {
        NAME("name") {
            @Override public String getStringFromItem(Item item) {
                return item.getName();
            }
        }, 
        NUMBER("#") {
            @Override public String getStringFromItem(Item item) {
                return Integer.toString(item.getNumber());
            }
        }, 
        PARENT("parent") {
            @Override public String getStringFromItem(Item item) { …
Run Code Online (Sandbox Code Playgroud)

swing jxtable tablecellrenderer

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

使用SwingX对JXTable进行排序

我使用的JXTable是SwingX组件.如果我使用setSortable(boolean flag)方法,那么它将启用或禁用所有列的排序.

根据我的要求,我想禁用几列的排序并启用其他列的排序.

任何人都可以帮助实现此功能?


感谢您的回复.你可以帮我使用setSorterClass(String sorterClassName)禁用一列的排序吗?你能给我任何代码examplex吗?这对我很有帮助.

java swingx jxtable

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

合并JXTreeTable中的单元格

我想在JXTreeTable中合并两个单元格.这可能吗?我已经阅读了在JTable中合并单元格的解决方案,但这对JXTreeTables不起作用.

合并单元格的意思是什么:我想创建一个这样的结构:

node 1    | title for 3 cells | title for 3 cells |
  subnode |  c1  | c2  |  c3  |  c1  | c2  |  c3  |
  subnode |  c1  | c2  |  c3  |  c1  | c2  |  c3  |

因此,通过在同一行/节点上合并3个不同的单元来创建"3个单元的标题".

java merge swing cells jxtable

5
推荐指数
1
解决办法
1214
查看次数

JXTable中的JComboBox问题

我试图使JXTable中的列成为一个组合框.很难解释我面临的问题.当您单击下拉列表时,下拉列表有时不会保持打开足够长的时间以便您选择该值.它只是关闭并选择了一些值.有时它会保持开放状态供您选择一个值.这是SSCCE:

import java.awt.Color;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;

import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.renderer.CellContext;
import org.jdesktop.swingx.renderer.ComponentProvider;
import org.jdesktop.swingx.renderer.DefaultTableRenderer;

public class Test {

    public static void main(String[] args) {
        JXFrame frame=new JXFrame();
        Object[][] rows = new Object[10][];

        for (int i = 0; i < rows.length; i++) {
        rows[i] = new Object[]{
        "Test data ","Yes"};
        }

        DefaultTableModel model = new DefaultTableModel(rows,
        new String[]{
        "Title 1", "Title 2"
        });

        final JXTable table = new JXTable(model);
        DefaultComboBoxModel cmodel = …
Run Code Online (Sandbox Code Playgroud)

java swing swingx jxtable

5
推荐指数
1
解决办法
940
查看次数

如何处理表并行排序和添加数据?

我面临着重复行的问题JXTable.如果我JXTable在插入新行时对数据进行排序JXTable,则最终结果会JXTable显示在表中产生无效结果的重复行.即使它也显示已插入的行的正确计数但有些行完全丢失,而某些行被发现重复JXTable.

如果我JXTable已经成功插入了所有数据,那么它显示正确的数据,即没有重复的行,也没有丢失的行.

代码示例:我有一个方法,我传递defaultTableModel,这里是在表中添加项目

public void addingItems(DefaultTableModel  defaultTableModel)
{
for(int i=0;i< numberofItems;i++){
Vector vobject = new Vector();
vobject.add("...");
vobject.add("xxx");
vobject.add("yyy");
...
..
vobject.add("");
defaultTableModel.addRow(vobject);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我在tableHeader actionlistener中添加了排序代码

tableheader.addMouseListener(new MouseListener() {
 public void mouseClicked(MouseEvent e) {
     Vector data = defaultTableModel.getDataVector();   
     Collections.sort(data, new ColumnSorter(colIndex, ascending));
}
Run Code Online (Sandbox Code Playgroud)

});

我已将代码放入synchronized块中但未获得成功.

请提供更好的解决方案来解决此问题.

java sorting jxtable

5
推荐指数
1
解决办法
221
查看次数

如何在JTable/JXTable中设置列宽?

我的应用程序由几个JTables组成.JXTables.目标是存储列宽并在启动时重新加载它们.

但是下面的代码对表的列宽没有任何改变:

tblTasks.getColumn(1).setWidth(36);
Run Code Online (Sandbox Code Playgroud)

而且这个没有做任何事情:

tblTasks.getColumn(1).setPreferredWidth(36);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

java swing jtable column-width jxtable

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

防止在jxtable中排序前三行

我有一个JXtable.我想阻止排名前三行.基本上,前3行应始终位于顶部,其余的应根据其值进行排序.

在SO上有一个类似的问题,但我不知道如何真正将它应用于我的使用 Sort ROW,除了最后一行

主要区别在于我正在使用JXTable.有一种简单的方法可以做到这一点,我错过了吗?

这是我的JXtable代码

jTable1 = new JXTable();
if (isClickable) {
    jTable1.getTableHeader().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

    //set the sorter here
} else {
    jTable1.setSortable(false);
}
Run Code Online (Sandbox Code Playgroud)

java swing jtable swingx jxtable

5
推荐指数
1
解决办法
200
查看次数

JXTable列中的HyperLinks,从数据库填充

我的问题是如何将JXTable列(仅适用于一个/特定列)的超链接转换为我的默认桌面Web浏览器的"_blank"链接.

我使用JXTable和DefaultTableModel,我也从sqlite数据库调用数据.我在互联网,谷歌,[...]进行了研究,我发现了很多信息,如果我没有犯错:

  • 将MouseListener注册到JXTable;
  • 从MouseEvent生成点对象;
  • 通过getValueAt获取文本

***注意:该列每个单元只有1个链接,没有任何文本,只有链接.

现在我已经实现了这个代码来做一个双击单元格的动作.请有人可以帮我实现一个列超链接,这个超链接在默认浏览器中打开,就像在这个例子中一样(但我不知道如何调整,因为数据不是从数据库中调用的).

Table_Employee.addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e) {
      if (e.getClickCount() == 2) {
         JXTable target = (JXTable)e.getSource();
         int row = target.getSelectedRow();
         int column = target.getSelectedColumn();
           JFrame newFrame = new JFrame();               //I want to open an distinc link
               newFrame.setTitle("Detail Screen");       //for every cell along one column
               newFrame.setVisible(true);                //in the web browser, not a frame.
         }
   }
});
Run Code Online (Sandbox Code Playgroud)

编辑1 @Kleopatra编辑2的代码对我的应用程序有一些问题.此外,我做了另一个尝试,如下面的代码,瞧 - 当涉及第一次点击时链接是存在的,但没有反应(没有浏览器打开).@Kleopatra,您能否向我提供有关您的建议的更多信息,因为当我尝试放置该代码时,IDE无法识别hyperlinkColumn.

Table_Employee.addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e) …
Run Code Online (Sandbox Code Playgroud)

java swing swingx hyperlink jxtable

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

当我切换到GlazedLists的EventTableModel时,为什么我的JXTable排序这么慢?

更新

我已经更新了这个问题,以便更准确地描述我的问题的原因,并且包含了一个比我最初使用的更简单的例子.

我在下面添加了一个简单的示例来说明我遇到的性能问题.当我使用普通的ArrayList支持我的JXTable时,它的表现相当不错.但是,如果我为EventList切换ArrayList并使用EventTableModel构建表,则排序要慢得多(在这种情况下慢约10倍).

如果使用Maven或Gradle,这里是我正在使用的工件坐标.

apply plugin: 'java'
apply plugin: 'application'
mainClassName = "SortPerfMain"

dependencies {
    compile "net.java.dev.glazedlists:glazedlists_java15:1.8.0"
    compile "org.swinglabs.swingx:swingx-core:1.6.4"
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子.我试图使用EventList的唯一原因是因为我想要一个我可以在TableModel之外修改并且发生必要通知的数据结构.

    import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.swing.EventTableModel;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.renderer.*;
import org.jdesktop.swingx.table.TableColumnExt;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

/* This class creates a JFrame with two JXTables displayed side by side.  Both
 * tables have a single column that holds Item objects.  Each Item has one …
Run Code Online (Sandbox Code Playgroud)

java swing swingx jxtable glazedlists

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

在JXTable中隐藏一列?

我正在使用JXTable,我想以编程方式隐藏列.

有没有方便的方法来做到这一点(没有设置miniman/maximal/preferd宽度)?

谢谢.

java swing swingx jxtable

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