2017-10-10 2 views
1

JTableJScrollPaneに入れようとしています。 JScrollPaneは、JTabbedPaneの一部であるJPanelの内部にあります。ここでJTabbedPane内のJScrollPaneにJTableを追加する

は、コードされています。私はこれを実行すると、table

JScrollPane scrollPane = new JScrollPane(); 
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);    

    JPanel pnlMaxMinAvg1 = new JPanel(); 
    scrollPane.setViewportView(pnlMaxMinAvg1); 
    tabbedPane.addTab("MaxMinAvg1", null, pnlMaxMinAvg1, null); 
    pnlMaxMinAvg1.setLayout(new BorderLayout(0,0)); 

table = new JTable(); 
     table.setModel(new DefaultTableModel(
      new Object[][] {{"V_L1_N_RMS_AVG", null} 
}, 
      new String[] { 
       "Variable", "Value" 
      } 
     )); 
     table.setBounds(178, 11, 200,300); 

scrollPane.add(table); 

表示されません。設定した場合:

pnlMaxMinAvg1.add(table); 

次にtableが表示されます。

なぜですか?

答えて

1

JPanelpnlMaxMinAvg1は、ビューポートビューをscrollPaneにするときには空です。 tablepnlMaxMinAvg1を追加すると、スクロールペインに空でないコンテンツが表示されます。さらに、setBounds()を避け、レ​​イアウトを作業させてください。下の例では、スクロールペインのビューはフラグメントのように明示的にテーブルに設定されていますが、スクロールペインのコンストラクタで指定できます。この変形例で

image

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

/** 
* @see https://stackoverflow.com/q/46669145/230513 
*/ 
public class TableTest { 

    private void display() { 
     JFrame f = new JFrame("TableTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTable table = new JTable(); 
     table.setModel(new DefaultTableModel(
      new Object[][]{{"V_L1_N_RMS_AVG", null}}, 
      new String[]{"Variable", "Value"} 
     )); 
     JScrollPane jsp = new JScrollPane(); 
     jsp.setViewportView(table); 
     JTabbedPane jtp = new JTabbedPane(); 
     jtp.add("TableTest", jsp); 
     f.add(jtp); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new TableTest()::display); 
    } 
} 

、Iは、データのN行を追加し、hereに示すようScrollable方法、getPreferredScrollableViewportSize()を上書きしました。囲むウィンドウのサイズを変更して、スクロールバーに与える影響を確認します。

image2

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

/** 
* @see https://stackoverflow.com/q/46669145/230513 
*/ 
public class TableTest { 

    private static final int N = 16; 

    private void display() { 
     JFrame f = new JFrame("TableTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     DefaultTableModel model = new DefaultTableModel(
      null, new String[]{"Variable", "Value"} 
     ); 
     JTable table = new JTable(model) { 

      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(256, getRowHeight() * N/2); 
      } 
     }; 
     for (int i = 0; i < N; i++) { 
      model.addRow(new Object[]{"V_L1_N_RMS_AVG" + i, String.valueOf(i)}); 
     } 
     JScrollPane jsp = new JScrollPane(); 
     jsp.setViewportView(table); 
     JTabbedPane jtp = new JTabbedPane(); 
     jtp.add("TableTest", jsp); 
     f.add(jtp); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new TableTest()::display); 
    } 
} 
関連する問題