业务需求,查阅多方资料,写出这个Test。高手多指教!
PS:程序使用了swing的主题包Alloy。下载地址:Swing主题包Alloy
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class ShowPane extends JDialog {
private static final long serialVersionUID = 3211670289885481102L;
int WIDTH = 1200;
int HEIGHT = 490;
JPanel panel = new JPanel();
Frame g = null;
public ShowPane(Frame owner,Object[][]obj){
super(owner, true);
g = owner;
Object[] columnTitle = { "收件人", "收件地址", "抄送人", "抄送地址", "附件","选择" };
DefaultTableModel dtm = new DefaultTableModel(columnTitle, 0);
for (Object[] v : obj) {
dtm.addRow(v);
}
final JTable table = new JTable(dtm){
private static final long serialVersionUID = 6608687572383071834L;
@Override
public boolean isCellEditable(int row, int column) {
// 表格不允许被编辑
if (column == 5) {
return true;//如果是选项框的行则可以编辑
}
return false;
}
/**
* 默认情况下这个方法不用重新实现的,但是这样就会造成如果这个列式boolean的类型,就当做string来处理了
* 如果是boolean的类型那么用checkbox来显示
*/
@Override
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
/**
* 以Tooltip的方式可以显示具体的值
*/
@Override
public String getToolTipText(MouseEvent e) {
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
return this.getValueAt(rowIndex, colIndex)==null?"":this.getValueAt(rowIndex, colIndex).toString();
}
};
table.setSize(WIDTH, HEIGHT);
final MyCheckBoxRenderer check = new MyCheckBoxRenderer();
TableColumn tc = table.getColumn("选择");
tc.setHeaderRenderer(check);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// 如果点击的是第6列,即checkbox这一列.下标从0开始
if (table.getColumnModel().getColumnIndexAtX(e.getX()) == 5) {
boolean b = !check.isSelected();
check.setSelected(b);
table.getTableHeader().repaint();
for (int i = 0; i < table.getRowCount(); i++) {
table.getModel().setValueAt(b, i, 5);// 把这一列都设成和表头一样
}
}
}
});
//-----------------设置列宽
int width = 150;
TableColumn c = table.getColumnModel().getColumn(0);//收件人
c.setPreferredWidth(width);
c.setMaxWidth(width);
c.setMinWidth(width);
c = table.getColumnModel().getColumn(1);//收件地址
width = 200;
c.setPreferredWidth(width);
c.setMaxWidth(width);
c.setMinWidth(width);
c = table.getColumnModel().getColumn(2);//抄送人
width =150;
c.setPreferredWidth(width);
c.setMaxWidth(width);
c.setMinWidth(width);
c = table.getColumnModel().getColumn(3);//抄送地址
width = 330;
c.setPreferredWidth(width);
c.setMaxWidth(width);
c.setMinWidth(width);
c = table.getColumnModel().getColumn(5);//选择列
width = 23;
c.setPreferredWidth(width);
c.setMaxWidth(width);
c.setMinWidth(width);
//----------------------
table.setPreferredScrollableViewportSize(new Dimension(WIDTH-50, HEIGHT-100));
JScrollPane jp = new JScrollPane(table);
jp.setViewportView(table);
jp.setSize(1000, HEIGHT-30);
JButton ok = new JButton("确定");
ok.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
ShowPane.this.dispose();
}
});
JButton cancel = new JButton("取消");
cancel.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
ShowPane.this.dispose();
System.out.println("取消发送");
}
});
panel.add(jp);
panel.add(ok);
panel.add(cancel);
this.add(panel);
this.setResizable(false);
}
public static void main(String[] args) {
final Object [][] o = {
{"张三","zhangsan@sina.com.cn","张无忌;张三丰","zhangwuji@163.com;sanfeng@souhu.com","C:\\Program Files\\Internet Explorer\\IE.exe",true}
,{"李四","lisi@gmail.com","李某某","moumou@haitianshengyan.com","D:\\MyVideo\\XXX\\a.avi",false}
};
final JFrame frame = new JFrame();
JButton btn = new JButton("确认");
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
ShowPane.invokeApp(frame,o);
}
});
frame.setSize(100,70);
frame.add(btn);
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/**
* 初始化界面
*/
void init() {
// 设置程序显示在屏幕中间
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int w = size.width;
int h = size.height;
int x = (w - WIDTH) / 2;
int y = (h - HEIGHT) / 2;
this.setBounds(x, y, WIDTH, HEIGHT);
this.setResizable(false);
this.setTitle("发送列表");
this.setVisible(true);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
/**
* 运行程序的主要方法。 主要功能:应用主题、创建面板
*/
public static void invokeApp(final Frame owner,final Object[][] row) {
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
UIManager.setLookAndFeel("com.incors.plaf.alloy.AlloyLookAndFeel");
new ShowPane(owner,row).init();
} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
class MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer {
private static final long serialVersionUID = 4343577984596283840L;
public MyCheckBoxRenderer() {
this.setBorderPainted(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
return this;
}
}