酒店管理系統之年結帳界面(swing)


package com.mwq.frame.check_out;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

import sun.swing.SwingUtilities2;

import com.mwq.dao.Dao;
import com.mwq.mwing.FixedColumnTablePanel;
import com.mwq.mwing.MTable;
import com.mwq.tool.Today;

public class YearDialog extends JDialog {

private JTable table;

private Vector<String> tableColumnV;

private Vector<Vector<Object>> tableValueV;

private DefaultTableModel tableModel;

private JComboBox yearComboBox;

private Dao dao=Dao.getInstance();

/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
try {
YearDialog dialog = new YearDialog();
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the dialog
*/
public YearDialog() {
super();
setModal(true);
setTitle("年結賬");
setBounds(60, 60, 860, 620);

final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.NORTH);

yearComboBox = new JComboBox();
yearComboBox.setMaximumRowCount(10);
String minDatetime = dao.sOrderFormOfMinDatetime();
int year = Today.getYEAR();
if (minDatetime == null) {
yearComboBox.addItem(year);
} else {
int minYear = Integer.valueOf(minDatetime.substring(0, 4));
for (int y = minYear; y <= year; y++) {
yearComboBox.addItem(y);
}
}
yearComboBox.setSelectedItem(year);
panel.add(yearComboBox);

final JLabel yearLabel = new JLabel();
yearLabel.setText("年 ");
panel.add(yearLabel);

final JButton submitButton = new JButton();
submitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableValueV.removeAllElements();
int year = (Integer) yearComboBox.getSelectedItem();
tableValueV.addAll(dao.yearCheckOut(year));
Container contentPane = getContentPane();
contentPane.remove(1);
getContentPane()
.add(
new FixedColumnTablePanel(tableColumnV,
tableValueV, 1), BorderLayout.CENTER);
SwingUtilities.updateComponentTreeUI(contentPane);
}
});
submitButton.setText("確定");
panel.add(submitButton);

tableColumnV = new Vector<String>();
tableColumnV.add("日期");
for (int i = 1; i <= 12; i++) {
tableColumnV.add(i + " 月");
}
tableColumnV.add("總計");

tableValueV = new Vector<Vector<Object>>();

getContentPane().add(
new FixedColumnTablePanel(tableColumnV, tableValueV, 1),
BorderLayout.CENTER);
//
}

}



上面代碼得出如下圖:

[img]http://dl.iteye.com/upload/attachment/472713/2e438d00-a849-398c-933e-52c132511612.jpg[/img]

上面在100行:
getContentPane().add(new FixedColumnTablePanel(tableColumnV,tableValueV, 1), BorderLayout.CENTER);
中還用到下面代碼:

package com.mwq.mwing;

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

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;

public class FixedColumnTablePanel extends JPanel {

private MTable fixedColumnTable;

private FixedColumnTableModel fixedColumnTableModel;

private MTable floatingColumnTable;

private FloatingColumnTableModel floatingColumnTableModel;

private Vector<String> tableColumnV;

private Vector<Vector<Object>> tableValueV;

private int fixedColumn = 2;

public FixedColumnTablePanel(Vector<String> tableColumnV,
Vector<Vector<Object>> tableValueV, int fixedColumn) {
super();
setLayout(new BorderLayout());

this.tableColumnV = tableColumnV;
this.tableValueV = tableValueV;
this.fixedColumn = fixedColumn;

fixedColumnTableModel = new FixedColumnTableModel();// 創建固定列表格模型對象

fixedColumnTable = new MTable(fixedColumnTableModel);// 創建固定列表格對象
ListSelectionModel fixed = fixedColumnTable.getSelectionModel();// 獲得選擇模型對象
fixed.addListSelectionListener(new MListSelectionListener(true));// 添加行被選中的事件監聽器

floatingColumnTableModel = new FloatingColumnTableModel();// 創建可移動列表格模型對象

floatingColumnTable = new MTable(floatingColumnTableModel);// 創建可移動列表格對象
ListSelectionModel floating = floatingColumnTable.getSelectionModel();// 獲得選擇模型對象
floating.addListSelectionListener(new MListSelectionListener(false));// 添加行被選中的事件監聽器

JScrollPane scrollPane = new JScrollPane();// 創建一個滾動面版對象
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedColumnTable
.getTableHeader()); // 將固定列表格頭放到滾動面版的左上方

JViewport viewport = new JViewport();// 創建一個用來顯示基礎信息的視口對象
viewport.setView(fixedColumnTable);// 將固定列表格添加到視口中
viewport.setPreferredSize(fixedColumnTable.getPreferredSize());// 設置視口的首選大小爲固定列表格的首選大小
scrollPane.setRowHeaderView(viewport);// 將視口添加到滾動面版的標題視口中

scrollPane.setViewportView(floatingColumnTable);// 將可移動表格添加到默認視口

add(scrollPane, BorderLayout.CENTER);
//
}

class MTable extends JTable {

public MTable(AbstractTableModel tableModel) {
super(tableModel);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}

// 表格列名信息
@Override
public JTableHeader getTableHeader() {
// 獲得表格頭對象
JTableHeader tableHeader = super.getTableHeader();
tableHeader.setReorderingAllowed(false);// 設置表格列不可重排
// 獲得表格頭的單元格對象
DefaultTableCellRenderer defaultRenderer = (DefaultTableCellRenderer) tableHeader
.getDefaultRenderer();
// 設置單元格內容(即列名)居中顯示
defaultRenderer
.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
return tableHeader;
}

// 表格列值居中顯示
@Override
public TableCellRenderer getDefaultRenderer(Class<?> columnClass) {
DefaultTableCellRenderer defaultRenderer = (DefaultTableCellRenderer) super
.getDefaultRenderer(columnClass);
defaultRenderer
.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
return defaultRenderer;
}

// 表格行只可單選
@Override
public ListSelectionModel getSelectionModel() {
ListSelectionModel selectionModel = super.getSelectionModel();
selectionModel
.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
return selectionModel;
}

// 用來設置表格的選中行
@Override
public void setRowSelectionInterval(int fromRow, int toRow) {// 重構父類的方法
super.setRowSelectionInterval(fromRow, toRow);
}

// 用來設置表格的唯一選中行
public void setRowSelectionInterval(int row) {// 通過重載實現自己的方法
setRowSelectionInterval(row, row);
}

}

class FixedColumnTableModel extends AbstractTableModel {

public int getColumnCount() {// 返回固定列的數量
return fixedColumn;
}

public int getRowCount() {// 返回行數
return tableValueV.size();
}

public Object getValueAt(int rowIndex, int columnIndex) {// 返回指定單元格的值
return tableValueV.get(rowIndex).get(columnIndex);
}

@Override
public String getColumnName(int columnIndex) {// 返回指定列的名稱
return tableColumnV.get(columnIndex);
}

}

class FloatingColumnTableModel extends AbstractTableModel {

public int getColumnCount() {// 返回可移動列的數量
return tableColumnV.size() - fixedColumn;// 需要扣除固定列的數量
}

public int getRowCount() {// 返回行數
return tableValueV.size();
}

public Object getValueAt(int rowIndex, int columnIndex) {// 返回指定單元格的值
return tableValueV.get(rowIndex).get(columnIndex + fixedColumn);// 需要爲列索引加上固定列的數量
}

@Override
public String getColumnName(int columnIndex) {// 返回指定列的名稱
return tableColumnV.get(columnIndex + fixedColumn);// 需要爲列索引加上固定列的數量
}

}

class MListSelectionListener implements ListSelectionListener {
boolean isFixedColumnTable = true; // 默認由選中固定列表格中的行觸發

public MListSelectionListener(boolean isFixedColumnTable) {
this.isFixedColumnTable = isFixedColumnTable;
}

public void valueChanged(ListSelectionEvent e) {
if (isFixedColumnTable) { // 由選中固定列表格中的行觸發
int selectedRow = fixedColumnTable.getSelectedRow(); // 獲得固定列表格中的選中行
floatingColumnTable.setRowSelectionInterval(selectedRow); // 同時選中可移動列表格中的選中行
} else { // 由選中可移動列表格中的行觸發
int selectedRow = floatingColumnTable.getSelectedRow(); // 獲得可移動列表格中的選中行
fixedColumnTable.setRowSelectionInterval(selectedRow); // 同時選中固定列表格中的選中行
}
}
}

}

發佈了28 篇原創文章 · 獲贊 8 · 訪問量 6735
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章