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 ConfirmPane extends JDialog {
int WIDTH = 1200;
int HEIGHT = 490;
JPanel panel = new JPanel();
Graphical g = null;
public ConfirmPane(Graphical 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){
@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();
}
};
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) {
if (table.getColumnModel().getColumnIndexAtX(e.getX()) == 5) {// 如果点击的是第0列,即checkbox这一列
JCheckBox Checkbox = (JCheckBox) check;
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 = 70;
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 =70;
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);
//----------------------
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) {
// 发送邮件。
g.bar.setValue(0);
g.bar.setString("正在发送 - " + g.bar.getValue() + "%");
SendEmailThread sendEmail = new SendEmailThread();
sendEmail.setGraphical(g);
sendEmail.setProgressBar(g.bar);
sendEmail.start();
ConfirmPane.this.dispose();
}
});
JButton cancel = new JButton("取消");
cancel.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
ConfirmPane.this.dispose();
System.out.println("取消发送");
}
});
panel.add(jp);
panel.add(ok);
panel.add(cancel);
this.add(panel);
}
/**
* 初始化界面
*/
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 Graphical 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 ConfirmPane(owner,row).init();
} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
class MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer {
public MyCheckBoxRenderer() {
this.setBorderPainted(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// TODO Auto-generated method stub
return this;
}
}
设置固定列宽的时候,一定要设置最大和最小列宽,否则无法固定。