-3

メソッドを呼び出すとupdateTable()、テーブルは正しく表示されますが、テーブルを水平方向にスクロールすると、一部のヘッダーが歪んでしまいます (間違ったヘッダー/ヘッダーが互いに重なっています)。

Netbeans を使用していますが、どうすればよいですか?

public void  updateTable(String query)
{        
   try
   {     
     String sql=query;            
     PreparedStatement pst=connectionVariable.prepareStatement(sql);
     ResultSet res=pst.executeQuery();               
     myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
     JScrollPane scrollpane = new JScrollPane(myTable);
     scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
     scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
     myTable.setModel(DbUtils.resultSetToTableModel(res));
     pst.close();
     res.close();
   }
   catch(Exception e) { JOptionPane.showMessageDialog(null,""+e+"","Error Updating Table",JOptionPane.ERROR_MESSAGE);  }
}

public loadTableAsPerSelection() 
{
  initComponents();
  String load_table="Select columnnames from tablenames";
  updateTable(load_table);
 }
4

1 に答える 1

3

では、期待どおりに動作する 40 列と 2000 行の例を次に示します。

import java.awt.BorderLayout;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TestTable2 {

    protected void initUI() {
        DefaultTableModel model = new DefaultTableModel();
        for (int i = 0; i < 40; i++) {
            model.addColumn("Col-" + (i + 1));
        }
        for (int i = 0; i < 2000; i++) {
            Vector<Object> row = new Vector<Object>();
            for (int j = 0; j < 40; j++) {
                row.add("Cell " + (i + 1) + "," + (j + 1));
            }
            model.addRow(row);
        }
        JTable table = new JTable(model);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        JFrame frame = new JFrame(TestTable2.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollpane = new JScrollPane(table);
        scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.setSize(1000, 800);
        frame.setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTable2().initUI();
            }
        });
    }

}
于 2013-01-27T14:52:13.147 に答える