0

jTablejScrollPaneas 中添加了:

    public Scenario_One() {
      initComponents();
      jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
      jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    }

    private void initComponents() {
       .
       .
       jScrollPane1.setViewportView(jTable1);
       .
       .
    }

单行显示的文本太大,所以我不得不使用水平滚动条。但即使将策略设置为as needed我也看不到水平滚动条。这可能是什么原因?

4

2 回答 2

3

正如@MadProgrammer 已经评论的那样,控制 JScrollPane 内的表大小调整行为的属性是 autoResizeMode。基本上,有两种选择:

  • autoResizeOff:列总是以它们的 prefWidth 显示,根据需要显示/隐藏水平滚动条。如果它们的总宽度小于视口宽度,则尾随空间是空闲的(显示视口)
  • 所有其他:列的大小使得表格的总宽度适合scrollPane,水平滚动条从不显示

核心 JTable支持表格“适合”视口直到列太宽而无法完全显示然后自动允许滚动的(直观)期望。JXTable(包含在SwingX 项目中)为此提供了一个额外的大小调整选项。

于 2012-10-15T08:48:20.503 回答
2

尝试这样的事情......

在此处输入图像描述

public class TestTableColumns {

    public static void main(String[] args) {
        new TestTableColumns();
    }

    public TestTableColumns() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                DefaultTableModel model =new DefaultTableModel(
                                new Object[][] {
                                    {"1", "2"},
                                    {"11", "21"},
                                    {"12", "22"},
                                    {"13", "23"},
                                    {"14", "24"},
                                    {"15", "25"},
                                    {"16", "26"},
                                    {"17", "27"},
                                    {"18", "28"}}, 
                                new Object[] {
                                    "Small", "Big"});

                JTable table = new JTable(model);
                table.setShowHorizontalLines(true);
                table.setShowVerticalLines(true);
                table.setShowGrid(true);
                table.setGridColor(Color.DARK_GRAY);
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                table.getColumn("Small").setPreferredWidth(100);
                table.getColumn("Small").setWidth(12);
                table.getColumn("Big").setPreferredWidth(400);
                table.getColumn("Big").setWidth(100);

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }            
        });
    }    
}

视口的宽度由它所包含的组件的宽度决定。对于 a JTable,这取决于列的大小和自动大小策略

于 2012-10-15T09:03:54.423 回答