動(dòng)態(tài)創(chuàng)建表格,比如:str你從數(shù)據(jù)庫(kù)讀出列名,data數(shù)據(jù)集
創(chuàng)新互聯(lián)公司-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、成都機(jī)柜租用、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),電話聯(lián)系:18982081108
這里的data是一個(gè)二維數(shù)組,
就像
{{學(xué)號(hào):001,出生:09-01,成績(jī)99}
{學(xué)號(hào):001,出生:09-01,成績(jī)99}
{學(xué)號(hào):001,出生:09-01,成績(jī)99}}
生成表格
學(xué)號(hào) 出生日期 成績(jī)
001 09-01 99
001 09-01 98
001 09-01 99
可以用FineReport報(bào)表軟件實(shí)現(xiàn)。finereport是純java軟件,類excel設(shè)計(jì)模式,是一款功能極其牛掰的表格工具,可與數(shù)據(jù)庫(kù)直接對(duì)接(一般的數(shù)據(jù)庫(kù),Oracle,SqlServer,MySql,DB2,Sybase,Informix等都支持),文本數(shù)據(jù)直接導(dǎo)入當(dāng)然也支持,企業(yè)級(jí)額應(yīng)用中包括設(shè)置定時(shí)報(bào)表、自定匯總數(shù)據(jù)發(fā)送郵件、報(bào)表權(quán)限分配、決策平臺(tái)搭建等,因?yàn)槭菍I(yè)的報(bào)表軟件,功能很強(qiáng)大
JTable單元格是由單元格繪制器繪制出來(lái)的,這是一些執(zhí)行TableCellRenderer接口的類。TableCellRenderer接口定義了唯一的getTableCellRendererComponent方法,返回對(duì)Component的引用,二Component則用來(lái)實(shí)現(xiàn)繪圖操作。但是因?yàn)槎x單獨(dú)的類來(lái)執(zhí)行TableCellRenderer比較方便,而且可以實(shí)現(xiàn)繪圖操作,所以TablecellRenderer通常只返回對(duì)自己的引用。下面是傳遞給getTableCellRendererComponent()方法的幾個(gè)參數(shù):
對(duì)JTable的引用,含有要繪制的單元格
對(duì)單元格值的引用
boolean標(biāo)記,用來(lái)表示單元格是否被選中
boolean標(biāo)記,用來(lái)表示單元格是否為輸入焦點(diǎn)
繪制的單元格的行索引號(hào)
繪制的單元格的列索引號(hào)
可以用FineReport報(bào)表軟件實(shí)現(xiàn)。finereport是純java軟件,類excel設(shè)計(jì)模式,是一款功能極其牛掰的表格工具,可與數(shù)據(jù)庫(kù)直接對(duì)接(一般的數(shù)據(jù)庫(kù),Oracle,SqlServer,MySql,DB2,Sybase,Informix等都支持),文本數(shù)據(jù)直接導(dǎo)入當(dāng)然也支持,企業(yè)級(jí)額應(yīng)用中包括設(shè)置定時(shí)報(bào)表、自定匯總數(shù)據(jù)發(fā)送郵件、報(bào)表權(quán)限分配、決策平臺(tái)搭建等,因?yàn)槭菍I(yè)的報(bào)表軟件,功能很強(qiáng)大,其實(shí)很多業(yè)內(nèi)人士都在用這款軟件,另外幾乎不用自己編寫代碼,所以新手很容易上手使用。應(yīng)該會(huì)比較適合您的,滿意的話可以采納的哦,謝謝了
一、動(dòng)態(tài)加載表格
1.首先在html中為表格的添加位置設(shè)置id
即是在html的body標(biāo)簽內(nèi)部寫一個(gè)div標(biāo)簽表明表格要添加到此div的內(nèi)部。如下
div id="tdl"div
2.在javascript中寫添加表格的語(yǔ)句
若在當(dāng)前html文件中,則寫在script標(biāo)簽內(nèi)部,如
代碼如下:
script type="text/javascript"
document.getElementById("tbl").innerHTML="tabletrtd/td/tr/table" //此處添加的表格可根據(jù)自己需要?jiǎng)?chuàng)建
/script
若是通過(guò)引入js文件,則在js文件(假設(shè)是test.js)中直接寫如下語(yǔ)句
代碼如下:
document.getElementById("tbl").innerHTML="tabletrtd/td/tr/table"
然后再引入自己的html文件
代碼如下:
script type="text/javascript" src="test.js"/script
二、 動(dòng)態(tài)添加表格行
1.首先在html中為表格行的添加位置設(shè)置id,此位置必須是tbody內(nèi)部(不是特別準(zhǔn)確,但根據(jù)我的測(cè)試就得到此結(jié)論,有其他的方法請(qǐng)留言,謝謝),如下
代碼如下:
table
thead/thead
tfoottfoot //tfoot與thead是與tbody配套使用,但我在寫的時(shí)候,沒(méi)用也可以。
tbody id="rows"/tbody
/table
[\s\S ]*\n
2.在javascript內(nèi)容中,要先創(chuàng)建行和單元格,再在.tbody中添加行,如下
[code]
row=document.createElement("tr"); //創(chuàng)建行
td1=document.createElement("tr"); //創(chuàng)建單元格
td1.appendChild(document.createTextNode("content")); //為單元格添加內(nèi)容
row.appendChild(td1); //將單元格添加到行內(nèi)
document.getElementById("rows").append(row); //將行添加到tbody中
計(jì)算器
package hkc_1205;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class rot13input extends JFrame implements ActionListener {
//public static void main (String[] arags)
/** 計(jì)算器上的鍵的顯示名字 */
private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
/** 計(jì)算器上的功能鍵的顯示名字 */
private final String[] COMMAND = ;
/** 計(jì)算器左邊的M的顯示名字 */
private final String[] M = ;
/** 計(jì)算器上鍵的按鈕 */
private JButton keys[] = new JButton[KEYS.length];
/** 計(jì)算器上的功能鍵的按鈕 */
private JButton commands[] = new JButton[COMMAND.length];
/** 計(jì)算器左邊的M的按鈕 */
private JButton m[] = new JButton[M.length];
/** 計(jì)算結(jié)果文本框 */
private JTextField resultText = new JTextField("0");
// 標(biāo)志用戶按的是否是整個(gè)表達(dá)式的第一個(gè)數(shù)字,或者是運(yùn)算符后的第一個(gè)數(shù)字
private boolean firstDigit = true;
// 計(jì)算的中間結(jié)果。
private double resultNum = 0.0;
// 當(dāng)前運(yùn)算的運(yùn)算符
private String operator = "=";
// 操作是否合法
private boolean operateValidFlag = true;
/**
* 構(gòu)造函數(shù)
*/
public rot13input(){
super();
//初始化計(jì)算器
init();
//設(shè)置計(jì)算器的背景顏色
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("計(jì)算器");
//在屏幕(500, 300)坐標(biāo)處顯示計(jì)算器
this.setLocation(500, 300);
//不許修改計(jì)算器的大小
this.setResizable(false);
//使計(jì)算器中各組件大小合適
this.pack();
}
/**
* 初始化計(jì)算器
*/
private void init() {
// 文本框中的內(nèi)容采用右對(duì)齊方式
resultText.setHorizontalAlignment(JTextField.RIGHT);
// 不允許修改結(jié)果文本框
resultText.setEditable(false);
// 設(shè)置文本框背景顏色為白色
resultText.setBackground(Color.white);
//初始化計(jì)算器上鍵的按鈕,將鍵放在一個(gè)畫板內(nèi)
JPanel calckeysPanel = new JPanel();
//用網(wǎng)格布局器,4行,5列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i KEYS.length; i++) {
keys[i] = new JButton(KEYS[i]);
calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue);
}
//運(yùn)算符鍵用紅色標(biāo)示,其他鍵用藍(lán)色表示
keys[3].setForeground(Color.red);
keys[8].setForeground(Color.red);
keys[13].setForeground(Color.red);
keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
//初始化功能鍵,都用紅色標(biāo)示。將功能鍵放在一個(gè)畫板內(nèi)
JPanel commandsPanel = new JPanel();
//用網(wǎng)格布局器,1行,3列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素
commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i COMMAND.length; i++) {
commands[i] = new JButton(COMMAND[i]);
commandsPanel.add(commands[i]);
commands[i].setForeground(Color.red);
}
//初始化M鍵,用紅色標(biāo)示,將M鍵放在一個(gè)畫板內(nèi)
JPanel calmsPanel = new JPanel();
//用網(wǎng)格布局管理器,5行,1列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個(gè)象素,垂直方向間隔為3個(gè)象素
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));
for (int i = 0; i M.length; i++) {
m[i] = new JButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(Color.red);
}
//下面進(jìn)行計(jì)算器的整體布局,將calckeys和command畫板放在計(jì)算器的中部,
//將文本框放在北部,將calms畫板放在計(jì)算器的西部。
//新建一個(gè)大的畫板,將上面建立的command和calckeys畫板放在該畫板內(nèi)
JPanel panel1 = new JPanel();
//畫板采用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素
panel1.setLayout(new BorderLayout(3, 3));
panel1.add("North", commandsPanel);
panel1.add("West", calckeysPanel);
//建立一個(gè)畫板放文本框
JPanel top = new JPanel();
top.setLayout(new BorderLayout());
top.add("Center", resultText);
//整體布局
getContentPane().setLayout(new BorderLayout(3, 5));
getContentPane().add("North", top);
getContentPane().add("Center", panel1);
getContentPane().add("West", calmsPanel);
//為各按鈕添加事件偵聽器
//都使用同一個(gè)事件偵聽器,即本對(duì)象。本類的聲明中有implements ActionListener
for (int i = 0; i KEYS.length; i++) {
keys[i].addActionListener(this);
}
for (int i = 0; i COMMAND.length; i++) {
commands[i].addActionListener(this);
}
for (int i = 0; i M.length; i++) {
m[i].addActionListener(this);
}
}
/**
* 處理事件
*/
public void actionPerformed(ActionEvent e) {
//獲取事件源的標(biāo)簽
String label = e.getActionCommand();
if (label.equals(COMMAND[0])){
//用戶按了"Backspace"鍵
handleBackspace();
} else if (label.equals(COMMAND[1])) {
//用戶按了"CE"鍵
resultText.setText("0");
} else if (label.equals(COMMAND[2])){
//用戶按了"C"鍵
handleC();
} else if ("0123456789.".indexOf(label) = 0) {
//用戶按了數(shù)字鍵或者小數(shù)點(diǎn)鍵
handleNumber(label);
// handlezero(zero);
} else {
//用戶按了運(yùn)算符鍵
handleOperator(label);
}
}
/**
* 處理Backspace鍵被按下的事件
*/
private void handleBackspace() {
String text = resultText.getText();
int i = text.length();
if (i 0) {
//退格,將文本最后一個(gè)字符去掉
text = text.substring(0, i - 1);
if (text.length() == 0) {
//如果文本沒(méi)有了內(nèi)容,則初始化計(jì)算器的各種值
resultText.setText("0");
firstDigit = true;
operator = "=";
} else {
//顯示新的文本
resultText.setText(text);
}
}
}
/**
* 處理數(shù)字鍵被按下的事件
* @param key
*/
private void handleNumber(String key) {
if (firstDigit) {
//輸入的第一個(gè)數(shù)字
resultText.setText(key);
} else if ((key.equals(".")) (resultText.getText().indexOf(".") 0)){
//輸入的是小數(shù)點(diǎn),并且之前沒(méi)有小數(shù)點(diǎn),則將小數(shù)點(diǎn)附在結(jié)果文本框的后面
resultText.setText(resultText.getText() + ".");
} else if (!key.equals(".")) {
//如果輸入的不是小數(shù)點(diǎn),則將數(shù)字附在結(jié)果文本框的后面
resultText.setText(resultText.getText() + key);
}
//以后輸入的肯定不是第一個(gè)數(shù)字了
firstDigit = false;
}
/**
* 處理C鍵被按下的事件
*/
private void handleC() {
//初始化計(jì)算器的各種值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
/**
* 處理運(yùn)算符鍵被按下的事件
* @param key
*/
private void handleOperator(String key) {
if (operator.equals("/")) {
//除法運(yùn)算
//如果當(dāng)前結(jié)果文本框中的值等于0
if (getNumberFromText() == 0.0){
//操作不合法
operateValidFlag = false;
resultText.setText("除數(shù)不能為零");
} else {
resultNum /= getNumberFromText();
}
} else if (operator.equals("1/x")) {
//倒數(shù)運(yùn)算
if (resultNum == 0.0){
//操作不合法
operateValidFlag = false;
resultText.setText("零沒(méi)有倒數(shù)");
} else {
resultNum = 1 / resultNum;
}
} else if (operator.equals("+")){
//加法運(yùn)算
resultNum += getNumberFromText();
} else if (operator.equals("-")){
//減法運(yùn)算
resultNum -= getNumberFromText();
} else if (operator.equals("*")){
//乘法運(yùn)算
resultNum *= getNumberFromText();
} else if (operator.equals("sqrt")) {
//平方根運(yùn)算
resultNum = Math.sqrt(resultNum);
} else if (operator.equals("%")){
//百分號(hào)運(yùn)算,除以100
resultNum = resultNum / 100;
} else if (operator.equals("+/-")){
//正數(shù)負(fù)數(shù)運(yùn)算
resultNum = resultNum * (-1);
} else if (operator.equals("=")){
//賦值運(yùn)算
resultNum = getNumberFromText();
}
if (operateValidFlag) {
//雙精度浮點(diǎn)數(shù)的運(yùn)算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} else {
resultText.setText(String.valueOf(resultNum));
}
}
//運(yùn)算符等于用戶按的按鈕
operator = key;
firstDigit = true;
operateValidFlag = true;
}
/**
* 從結(jié)果文本框中獲取數(shù)字
* @return
*/
private double getNumberFromText() {
double result = 0;
try {
result = Double.valueOf(resultText.getText()).doubleValue();
} catch (NumberFormatException e){
}
return result;
}
public static void main(String args[]) {
rot13input calculator1 = new rot13input();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}