0

jTable私はの中に追加しましjScrollPaneた:

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

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

1行に表示するテキストが大きすぎるため、水平スクロールバーを使用する必要がありました。ただし、ポリシーをに設定した後でもas needed、水平スクロールバーは表示されません。これの理由は何でしょうか?

4

2 に答える 2

3

@MadProgrammerがすでにコメントしているように、JScrollPane内のテーブルサイズ設定の動作を制御するプロパティはautoResizeModeです。基本的に、2つのオプションがあります。

  • 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);
            }            
        });
    }    
}

ビューポートの幅は、ビューポートに含まれるコンポーネントの幅によって決まります。の場合、JTableこれは列のサイズと自動サイズポリシーによって決定されます

于 2012-10-15T09:03:54.423 に答える