标签: jtable

带水平滚动条的JTable

有必要在任何时候启用水平滚动条吗?

情况就是这样:我有一个JTable单元格存储了很长的数据.因此,我需要有水平滚动条.

有人对此有所了解吗?

java swing jtable jscrollpane jscrollbar

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

如何摆脱JTable/JScrollPane的边界

如果您运行下面的小样本,您将看到中心区域周围的边框.我不确定为什么会出现这种边界.

当JTable在JScrollPane中时会发生这种情况.我尝试了各种各样的东西去除它,但到目前为止没有运气.没有JScrollPane的JTable没有显示边框.

见下面的示例.TIA.

public class TestScrollPane extends JFrame {

    public static void main(String[] args) {
        JFrame frame = new TestScrollPane();
        JPanel panel = new JPanel();
        JTable table = new JTable();

        panel.setLayout(new BorderLayout());
        panel.add(new JLabel("NORTH"), BorderLayout.NORTH);
        panel.add(new JLabel("SOUTH"), BorderLayout.SOUTH);

        JScrollPane sp = new JScrollPane(table);
        // None of these have any effect
        sp.setBorder(null);
        sp.getInsets().set(0, 0, 0, 0);
        sp.setViewportBorder(null);
        sp.getViewport().setBorder(null);
        sp.getViewport().getInsets().set(0, 0, 0, 0);
        sp.getViewport().setOpaque(true);

        panel.add(sp, BorderLayout.CENTER);
        // Adding the table alone shows no border
        // panel.add(table, BorderLayout.CENTER);
        frame.add(panel);

        frame.setVisible(true);
    }

    public TestScrollPane() …
Run Code Online (Sandbox Code Playgroud)

java swing jtable jscrollpane

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

最简单的代码从ResultSet填充JTable

我用Google搜索了一整天,没有运气.getnPrintAllData()按OK按钮后调用方法.所以代码是:

public class DatabaseSQLiteConnection {
    Connection conn = null;
    PreparedStatement statement = null;
    ResultSet res = null;

    public DatabaseSQLiteConnection(){
        try{
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection("jdbc:sqlite:test.sqlite");
            statement = conn.prepareStatement("SELECT * from product_info;");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }   

    public void getnPrintAllData(){
        String name, supplier, id;
        DefaultTableModel dtm = new DefaultTableModel();
        Window gui = new Window(); //My JPanel class        
        try{
            res = statement.executeQuery();
            testResultSet(res);
            ResultSetMetaData meta = res.getMetaData();
            int numberOfColumns = meta.getColumnCount();
            while (res.next())
            {
                Object [] rowData = new Object[numberOfColumns]; …
Run Code Online (Sandbox Code Playgroud)

java sqlite swing jtable defaulttablemodel

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

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

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

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

java swing jtable jtableheader jtogglebutton

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

如何在JTable中拖放行?

如何设置JTable以便能够将行拖动到表中的不同索引.例如,如果我有5行,我想将第4行拖到第2位?

java mouse swing drag-and-drop jtable

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

如何在jtable单元格中包装行?

我正在尝试实现本教程中描述的自定义TableRenderer .我想让渲染器换行包装给定单元格的每个文本.这个想法是,使用TextArea作为渲染器,因为它支持换行.但是,以下代码的行为不符合预期:

public class LineWrapCellRenderer  extends JTextArea implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            JTable table,
            Object value,
            boolean isSelected,
            boolean hasFocus,
            int row,
            int column) {
        this.setText((String)value);
        this.setWrapStyleWord(true);            
        this.setLineWrap(true);         
        return this;
    }

}
Run Code Online (Sandbox Code Playgroud)

我用这个渲染器设置了

table.setDefaultRenderer(String.class, new LineWrapCellRenderer());
Run Code Online (Sandbox Code Playgroud)

但是细胞条目仍未解开.如果我添加this.setBackground(Color.YELLOW)到该getTableCellRendererComponent()方法,所有单元格都按预期为黄色,但未包装.

有任何想法吗?

更新:正如Michael Borgwardt在评论中所述,问题不在于换行,​​而是行高:JTables行是固定大小的,所以如果单元格越来越高(因为文本现在是多行的),我们必须增加行高.但是多少钱?我会检查这是否值得另一个SO问题.如果没有,我会在这里添加此解决方案.

Update2:以下代码将确定行高(如果放入getTableCellRendererComponent()):

int fontHeight = this.getFontMetrics(this.getFont()).getHeight();
int textLength = this.getText().length();
int lines = textLength / this.getColumns() +1;//+1, cause we need at least 1 row.           
int height = fontHeight * …
Run Code Online (Sandbox Code Playgroud)

java swing jtable

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

Java Swing JTable; 右键单击菜单(如何将其设为"选择"并突出显示该行)

简短:我需要一个"右键单击事件"来突出显示单元格行.

我在Java Swing(Netbeans Matisse)的ScrollPane中使用JTable.我在JTable上有一个MouseClicked事件监听器,它执行以下操作:

if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) {
          System.out.println("Right Click");
          JPopUpMenu.show(myJTable, evt.getX(), evt.getY())
}
Run Code Online (Sandbox Code Playgroud)

问题是......每当我在JTable上执行右键单击时,行都不会突出显示(我将选择设置为行仅btw).我找了几个setSelected()函数但找不到合适的函数.默认情况下,左键单击会自动突出显示该行.如何设置右键点击?

java swing jtable right-click

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

在Java中双击JTable上的监听器

我很好奇如何valueChangedJTable双击行中时调用重写方法.现在,下面的代码片段实现了一个单击操作或事件箭头键,以便在人员列表中导航并进行相应调整JLabel.我正在尝试做的是类似于我点击一次的类似事情,但这次IF和ONLY如果双击一行dto就会改变其他事情.我该怎么做呢 :(

   class ListDataUI {

    public void addListSelectionListener(ListSelectionListener listSelectionListener) {
            summaryTable.getSelectionModel().addListSelectionListener(listSelectionListener);

 public T getSelectedDTO() {
        final int selectedRowIndex = summaryTable.getSelectedRow();
        if (selectedRowIndex != -1) {
            return data.get(summaryTable.convertRowIndexToModel(selectedRowIndex));
        } else {
            return null;
        }
    }
        }
    }




    class MainMenu extends javax.swing.JFrame {
    private void initListeners() {
    searchTable.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                AcademicDTO dto = (AcademicDTO) searchTable.getSelectedDTO();
                acImgLabel.setIcon(new ImageIcon());
                label_name.setText(dto.getTitle() + " " + dto.getForename() + " …
Run Code Online (Sandbox Code Playgroud)

java swing jtable double-click listselectionlistener

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

自动调整JTable列宽的大小

我需要我的JTable自动重新调整其列宽以适应内容.我发现这个TableColumnAdjuster课非常有用.但是有一个小问题.假设我有5列,其内容非常短.在这种情况下,如果我使用自动调整器,它会根据内容设置前四列宽度,并将所有剩余空间给予最后一列.请看这个例子.

在此输入图像描述

这里是最后一列,Balance给出了所有多余的空间.但是,如果我需要将该空间提供给其中一个中间列,该怎么办呢?在上面的例子中,我需要将该空间分配给第三列,name.我尝试修改TableColumnAdjuster类的adjustColumns()方法.但我无法让它发挥作用.

我尝试了两种方法column.setPreferredWidth()column.setWidth()改变了色谱柱尺寸.但似乎它没有改变任何东西.如何有效地更改a的列大小JTable.如果还有其他替代方案或直接回答我的主要问题,那就更好了.谢谢!

java swing jtable tablecolumn

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

删除JTable中的所有行

我需要删除JTable中的所有行.

我尝试了以下两种方法:

/**
 * Removes all the rows in the table
 */
public void clearTable()
{
    DefaultTableModel dm = (DefaultTableModel) getModel();
    dm.getDataVector().removeAllElements();
    revalidate();
}
Run Code Online (Sandbox Code Playgroud)

((DefaultTableModel)table.getModel()).setNumRows(0);
Run Code Online (Sandbox Code Playgroud)

两者都不会删除所有行.有任何想法吗?

java swing jtable

27
推荐指数
7
解决办法
9万
查看次数