0

アクセスデータベースから日付フィールドを取得してJTableに表示していますが、これはyyyy-MM-dd形式です。dd-MM-yyyyにしたい。MS Accessでフォーマットを変更しましたが、パネルに表示されていますが、yyyy-MM-ddのみです。どうすれば変更できますか?

日付フィールドは、クエリで取得する多くのフィールドの1つです。そのため、SimpleDateFormatterをどこに配置して、行ごとにフォーマットするかがわかりません。親切に私を助けてください。前もって感謝します。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Locale;
import javax.swing.*;
import javax.swing.table.*;
import java.util.Date;
import java.sql.*;
import java.sql.ResultSetMetaData;
import java.text.*;

public class gc implements ActionListener
{
JComboBox cc=new JComboBox();
JFrame frame=new JFrame();
JTable table;
DefaultTableModel model;
String query;
int i;
JPanel panel=new JPanel();

public gc()
{
frame.setTitle("Composition Check");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel p1=new JPanel();
p1.setLayout(new FlowLayout());

//Locale locale = Locale.getDefault();
//  System.out.println("Before setting, Locale is = " + locale); 
//Locale.setDefault(Locale.English);
//System.out.println("Before setting, Locale is = " + locale); 

try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:vasantham","","");
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select DISTINCT composition from try");

while(rs.next())
{
 cc.addItem(rs.getString("composition"));
}

conn.close();
}
catch(Exception e)
{
System.out.println(e);
}

p1.add(cc);
cc.addActionListener(this);
frame.add(p1,BorderLayout.NORTH);

frame.setVisible(true);
}

public class MyTableModel extends DefaultTableModel
{
public Class getColumnClass(int col) 
{
    if (col == 3) 
    {
        return java.util.Date.class;
    }
}
}

public void addTable(String query)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:vasantham","","");
Statement st=conn.createStatement();
System.out.println(query);
ResultSet rs=st.executeQuery(query);
ResultSetMetaData md=rs.getMetaData();
int cols=md.getColumnCount();
//table=new JTable();
model=new DefaultTableModel();

model.addColumn("Purpose");
model.addColumn("Name");
model.addColumn("Manu");
model.addColumn("Expiry");
model.addColumn("Stock");
model.addColumn("Cost");
model.addColumn("Supplier");
model.addColumn("Supplier Number");
model.addColumn("Rack");

table=new JTable(new MyTableModel());

String[] tabledata=new String[cols];
int i=0;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

while(rs.next())
{
for(i=0;i<cols;i++)
{
//if(i==3)
//{
 //System.out.println(rs.getObject(i+1).toString()); 
// tabledata[i]=formatter.format(rs.getObject(i+1).toString());
//}

 tabledata[i]=rs.getObject(i+1).toString();

}
model.addRow(tabledata);

}

panel.removeAll();
JScrollPane scroll = new JScrollPane(table); 
panel.setLayout(new BorderLayout());

panel.add(scroll,BorderLayout.CENTER);
frame.add(panel,BorderLayout.CENTER);
conn.close();
}
catch(Exception e)
{
System.out.println(e);
}
}

public void actionPerformed(ActionEvent evt)
{
String ac=(String)cc.getSelectedItem();
System.out.println(ac);

addTable("select * from try where composition='"+ac+"'");
frame.setVisible(true);
}

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

}
4

3 に答える 3

2

テーブルモデルをカスタマイズして、列がDate型の値を保持していることをJTableに通知する必要があります。

@Override
public Class getColumnClass(int col) {
    if (col == 3) {
        return java.util.Date.class;
    }
    // return the appropriate class for every column
}

これにより、JTableは、現在のロケールに関連付けられた形式で日付をフォーマットするレンダラーを使用するようになります。別のフォーマットが必要な場合は、別のレンダラーを列に関連付ける必要があります。これにより、必要に応じて日付がフォーマットされます。

于 2012-07-16T11:52:04.927 に答える
1
tabledata[i]=rs.getObject(i+1).toString();

これは、列のタイプを気にしていないように見えることを意味します。すべてが単純に文字列として扱われます。

問題を「解決」する2つの方法。日付として読み取り(type == dateの場合)、適切にフォーマットするか、テーブルでカスタムセルレンダラーを使用します。例: http: //www.exampledepot.com/egs/javax.swing.table/CustRend.html

于 2012-07-16T11:51:40.037 に答える
0

次のコードが機能しました!

while(rs.next())
{
for(i=0;i<cols;i++)
{
if(i==3)
{   
Date intr=(rs.getDate(i+1));
tabledata[i]=formatter.format(intr);
}
else
 tabledata[i]=rs.getObject(i+1).toString();
}
model.addRow(tabledata);
}

アイデアが有益だったJBNizetとTheStijnに感謝します!

于 2012-07-18T04:54:13.300 に答える