【问题标题】:JTable with horizontal scrollbar带有水平滚动条的 JTable
【发布时间】:2011-01-28 00:05:47
【问题描述】:

有什么方法可以在必要时启用水平滚动条吗?

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

有人对此有想法吗?

【问题讨论】:

    标签: java swing jtable jscrollpane jscrollbar


    【解决方案1】:

    首先,在JScrollPane 中添加您的JTable 并设置滚动条存在的策略:

    new JScrollPane(myTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    

    然后,通过设置AUTO_RESIZE_OFF 模式表明您的 JTable 不得自动调整列大小:

    myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    

    【讨论】:

    • 在 Netbeans 中,带有 JTable 初始组件的 JScrollPane 已在无法修改的方法中设置。有什么办法解决这个问题吗?我尝试输入该方法,但是,一旦我将上述代码放入按钮处理程序中以进行测试,表格就消失了。
    • @MrCooL 你能编辑你原来的帖子来展示你的Java代码吗?
    • 好的,它终于可以在 Netbeans 中进行一些操作了...谢谢 romaintaz! ;)
    • JScrollPane 的单参数构造函数设置了*_SCROLLBAR_AS_NEEDED,因此无需指定。
    • 为我节省了很多时间
    【解决方案2】:

    jTable的属性中将AutoResizeMode设置为OFF

    【讨论】:

      【解决方案3】:

      作为参考,这里是accepted approachminimal example。此外,

      import java.awt.Dimension;
      import java.awt.EventQueue;
      import javax.swing.JFrame;
      import javax.swing.JScrollPane;
      import javax.swing.JTable;
      import javax.swing.table.AbstractTableModel;
      import javax.swing.table.TableModel;
      
      /**
       * @see https://stackoverflow.com/a/37318673/230513
       */
      public class Test {
      
          private void display() {
              JFrame f = new JFrame("Test");
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              TableModel model = new AbstractTableModel() {
                  private static final int N = 32;
      
                  @Override
                  public int getRowCount() {
                      return N;
                  }
      
                  @Override
                  public int getColumnCount() {
                      return N;
                  }
      
                  @Override
                  public Object getValueAt(int rowIndex, int colIndex) {
                      return "R" + rowIndex + ":C" + colIndex;
                  }
              };
              JTable table = new JTable(model) {
                  @Override
                  public Dimension getPreferredScrollableViewportSize() {
                      return new Dimension(320, 240);
                  }
              };
              table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
              f.add(new JScrollPane(table));
              f.pack();
              f.setLocationRelativeTo(null);
              f.setVisible(true);
          }
      
          public static void main(String[] args) {
              EventQueue.invokeLater(new Test()::display);
          }
      }
      

      【讨论】:

        【解决方案4】:

        对我来说它有效:

        table.setAutoscrolls(true);

        【讨论】:

          【解决方案5】:

          我必须做几件事才能让我的工作正常

          1. autoResize 设置为AUTO_RESIZE_OFF
          2. 将 JTable 上的 preferredSize 设置为 null
          3. JScrollPane 上的horizontalScrollBarPolicy 设置为AS_NEEDED。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-05-28
            • 2014-07-22
            • 2019-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多