相关疑难解决方法(0)

如何将控件放在JTable的JTableHeader中?

给定一个JTable类型的列Boolean.class,默认渲染器是a JCheckBox.根据用户选择很容易选择单个单元格,但也可以方便地选择所有复选框或不选中复选框.最近 提到的这些示例JCheckBox在表头中使用,但实现很尴尬且没有吸引力.如果我不需要对列进行排序,我怎样才能将一个表现良好的控件放入JTableHeader

附录:为了方便起见,我添加了我的sscce作为答案,但我很乐意接受一个解决问题的良好行为方面的答案.

java swing jtable jtableheader jtogglebutton

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

个别且不连续的JTable单元选择

是否有任何干净的方法允许用户选择JTable的多个非连续单元格?或者我被迫实现自己的ListSelectionModel?

我在JTable上使用setCellSelectionEnabled()和setSelectionModel()方法,但我只能选择连续单元组.

编辑:

我试过@mKorbel不错的SSCCE.它适用于列表,但似乎没有完全在表上工作.这是一个SSCCE:

import java.awt.Component;

import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class TableSelection extends JFrame{
    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", "Black",
             "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White",
             "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown",
             "Pool", new Integer(10), new Boolean(false)}
        };

    public TableSelection(){
        JPanel main= …
Run Code Online (Sandbox Code Playgroud)

java swing jtable selection cells

4
推荐指数
2
解决办法
8016
查看次数

以前选择的JTable单元在按键时触发编辑器,即使明确取消选择也是如此

trashgod的很好的例子在这里,我把一个小演示其完成一个简单的任务在大概诚然令人费解的方式.下面显示的G​​UI显示一列代表真/假值的图标.如果单击图标,则会将值更改为与其相反的值.非常像一个复选框,但具有不同的外观,并且更具可扩展性(例如,我可以在将来更改它以循环使用十几个符号而不仅仅是两个布尔符号).

在此输入图像描述

我是通过使用自定义编辑器来实现的,该编辑器是JComponent的虚拟扩展.你甚至从未看到过这个虚拟组件,因为一旦它接收到一个MousePressed事件,它就会导致编辑器fireEditingStopped().除了我发现的一个奇怪的错误外,它的效果很好.如果你点击一个符号进行更改,然后将鼠标移动到屏幕上的其他位置并按下键盘键,它会在最后一个单击的单元格中显示虚拟编辑器(这有效地使单元格空白),它会一直保持在那里直到你将鼠标移动到单元格中或单击其他单元格.

作为一个hacky修复此问题,我在渲染器中添加了一行,它在渲染后总是取消选择整个表.这很好用,我已经确认整个表确实已被取消选择.但是,尽管如此,如果按键盘键,它仍会执行最后编辑的单元格的编辑器.我该如何防止这种行为?我的应用程序中有其他键盘监听器,如果没有选择单元格,我认为不应该执行任何编辑器.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.imageio.ImageIO;
import javax.swing.AbstractCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class JTableBooleanIcons {

    private JFrame frame;
    private DefaultTableModel tableModel;
    private JTable table;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTableBooleanIcons …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing jtable listener

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