❶ java里如何把表格加到分割容器中
用GridBagLayout吧,最精確的布局方法了。下面是我以前收藏的一篇文章你可以參考下,看上去很復雜,其實用起來還是挺好用的。
地址:
GridBagLayout
public GridBagLayout()
:
GridBagLayout是所有AWT布局管理器當中最復雜的,同時他的功能也是最強大的.這種現象源於它所提供的眾多的可配置選項,你幾乎可以完全地 控制容器的布局方式.盡管復雜性很明顯,只要理解了基本思想,就很容易使用GridBagLayout了.
GridBagLayout從它的名字中你也可以猜到,它同GridLayout一樣,在容器中以網格形式來管理組件.但GridBagLayout功能要來得強大得多.
1、GridBagLayout管理的所有行和列都可以是大小不同的.
2、GridLayout把每個組件限制到一個單元格,而GridLayout並不這樣:組件在容器中可以占據任意大小的矩形區域,
GridBagLayout通常由一個專用類來對他布局行為進行約束,該類叫GridBagConstraints.其中的所有成員都是public的, 因此要學好如何使用GridBagLayout首先要了解有那些約束變數,以及如何設置這些約束變數.
以下是GridBagConstraints的公有成員變數
public int anchor
public int fill
public gridheight
Public gridweight
public girdx
public gridy
public Insets insets
public int ipadx
public int ipady
public double weightx
public double weighty
看起來有很多約束需要進行設置,但事實上許多約束只需設置一次,並對多個組件重用,每次添加組件時只有少數的項需要修改.
下面是一個具有簡單約束的GridBagLayout示例
public class GridBagLayoutExample2 extends JPanel {
public GridBagLayoutExample2() {
this.setLayout(new GridBagLayout());
this.setOpaque(true);
GridBagConstraints c = new GridBagConstraints();
JButton b = new JButton ("One");
c.gridx = 0 ;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
this.add(b,c);//button 1 added
c.gridy++;
b= new JButton("Two");
this.add(b,c);
c.gridx = 2;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 2;
b = new JButton("Three");
this.add(b,c);
c.gridx = 0 ;
c.gridy = 2;
c.gridwidth = 4;
c.gridheight =1 ;
this.add(new JTextField(35),c);
}
public static void main(String[] args) {
JFrame f = new JFrame("GridBagLayout 2");
JPanel p = new GridBagLayoutExample2();
f.getContentPane().add(p);
f.pack();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
上述示例首先生成了約束對象c , 並設置了它的屬性gridx , gridy , gridwidth, girdheight四個屬性,下面簡要介紹這四個屬性的作用
gridx, gridy 這個屬性是用來描述組件在布局時應處於那個網格位置,即描述網格開始的位置
gridwidth,gridheigh這兩個屬性用來描述組件在布局中的所佔的網格的個數,gridwidth描述了該組件在橫向上所佔網格的個數,gridheight描述了該組件在縱向上所佔網格的個數.
你也可以通過GridBagConstraints的RELETIVE,和REMAINDER來進行指定,它的用法是:
當把gridx值設置為GridBagConstriants.RELETIVE時,在一個組件添加時,將被放置在前一個組件的右側.同理,對gridy 值設置為GridBagConstraints.RELETIVE時,在添加組件時,將被放置在前一個組件的下方,(這是一種根據前一個組件而決定當前組 件的相對放置方式)
對gridweight和gridheight也可以應用GridBagConstraints的REMAINDER方式,創建的組件會從創建的起點位置 開始一直延伸到容器所能允許的限度為止.該功能使得你可以創建跨越某些行或列的組件,從而改變相應方向上組件的數目,即使其後在布局的其他地方添加額外的 組件也是如此.
你可以注意到圖表1的buttonOne和buttonTwo上下緊靠,你可以通過設置GridBagConstraints成員Insets來調整它周圍的空間大小,
new Insets(int top , int left , int bottom, int right)
c.insets = new Insets(4,4,4,4);
接下去要解決的一個問題是容器縮放時的行為.對於文本欄這個問題是最明顯的,無論容器如何變形,它都保持同樣的大小.文本區域應該總是跨越在容器的底部,但你肯定不希望在縱向縮放時,文本欄也縱向增長.
weightx和weighty成員就是用來控制在容器變形時,單元格本身如何縮放.這兩個屬性都是浮點數值,描述了每個單元格在拉伸時橫向或縱向等到的分配比例.如對上例中的weightx設置
button one 0.4
button two 0.4
button three 0.6
text area 1.0
則在拉伸過程中,假設拉伸了10個象素,則button one橫向得到10*0.4 = 4個象素
button three得到了剩餘的6個象素.在拉伸過程中按鈕one和按鈕three以0.4:0.6的方式放大
為了放置縱向拉伸時,文本框的縱向擴展,你可以把weighty設置為0
你可能已經注意到,盡管我們已經將文本框的weight設置為1.0,但它並沒有占據額外的可用的橫向空間,即並沒有在橫向拉伸時始終占據整個底部行.
之 所以出現這個問題,是因為單元格和組件之間的區別還沒有弄清楚,weightx和weighty值控制的是容器增長時單元格擴展的程度,但它們對各個單元 格中的組件並沒有直接的效應.實際上,當窗口擴展時容器的所有單元格都增長了,包括文本框所在的一橫行單元格.但文本欄根本沒有增長.這是因為在所分配的 單元格內部,組件的增長是由GridBagConstraints對象的fill成員控制的,它可取下列值
GridBagConstraints.NONE 不增長
GridBagConstraints.HORIZONTAL 只橫向增長
GridBagConstraints.VERTICAL 只縱向增長
GridBagConstraints.BOTH 雙向增長
當你創建一個GridBagConstraints對象時,其fill值設置為NONE,因此在單元格增長時,單元格內部組件不會增長.
ipadx和ipady兩個屬性:
在GridBagLayout 對容器進行布局時,它把每個組件的最小尺寸作為如何分配空間的一個約束條件來考慮;如果一個按鈕的最小尺寸是30象素寬,20象素高,而相關聯的約束對象 中,ipadx為4,ipady為2,那麼按鈕的最小尺寸將會成為橫向38象素,縱向24象素.
anchor屬性:
當組件在橫向或縱向上小於所分配到的單元格面積時,該欄位會起作用.在這些情況下,anchor將決定組件如何在可用的空間中對齊.默認情況下,組件固定在單元格的中心,周圍均勻分布多餘空間.你也可以指定其他對齊方式:
GridBagConstraints.NORTH
GridBagConstraints.SOUTH
GridBagConstraints.NORTHWEST
GridBagConstraints.SOUTHWEST
GridBagConstraints.SOUTHEAST
GridBagConstraints.NORTHEAST
GridBagConstraints.EAST
❷ 我要用Java語言拆分一個int型的數組,讓相鄰的數字單獨組成一個個的小數組
int[] flag=new int[big.length];
int j=0;
flag[0]=0;
for(int i=1;i<big.length;i++){
if(!big[i-1]+1==big[i]) j++;
flag[i]=j;
}
//這樣得到的flag數組,為 0 0 0 1 2 2 2 3 3
//那麼,後面的還用說嗎?自己根據flag數組,當值相同的就放到一個新的數組中即可
❸ poi導入excel可以拆分合並的單元格么
POI生成excel表格,如何合並單元格
Java代碼
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
public class ExcelTest {
/**
* @param args
*/
public static void main(String[] args) throws IOException {
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFCellStyle style = wb.createCellStyle(); // 樣式對象
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
HSSFRow row = sheet.createRow((short) 0);
HSSFRow row2 = sheet.createRow((short) 1);
sheet.addMergedRegion(new Region(0, (short) 0, 1, (short) 0));
HSSFCell ce = row.createCell((short) 0);
ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文處理
ce.setCellValue("項目\\日期"); // 表格的第一行第一列顯示的數據
ce.setCellStyle(style); // 樣式,居中
int num = 0;
for (int i = 0; i < 9; i++) { // 循環9次,每一次都要跨單元格顯示
// 計算從那個單元格跨到那一格
int celln = 0;
int celle = 0;
if (i == 0) {
celln = 0;
celle = 1;
} else {
celln = (i * 2);
celle = (i * 2 + 1);
}
// 單元格合並
// 四個參數分別是:起始行,起始列,結束行,結束列
sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,
(short) (celle + 1)));
HSSFCell cell = row.createCell((short) (celln + 1));
cell.setCellValue("merging" + i); // 跨單元格顯示的數據
cell.setCellStyle(style); // 樣式
// 不跨單元格顯示的數據,如:分兩行,上一行分別兩格為一格,下一行就為兩格,「數量」,「金額」
HSSFCell cell1 = row2.createCell((short) celle);
HSSFCell cell2 = row2.createCell((short) (celle + 1));
cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
cell1.setCellValue("數量");
cell1.setCellStyle(style);
cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
cell2.setCellValue("金額");
cell2.setCellStyle(style);
num++;
}
// 在後面加上合計百分比
// 合計 在最後加上,還要跨一個單元格
sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,
(short) (2 * num + 2)));
HSSFCell cell = row.createCell((short) (2 * num + 1));
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("合計");
cell.setCellStyle(style);
HSSFCell cell1 = row2.createCell((short) (2 * num + 1));
HSSFCell cell2 = row2.createCell((short) (2 * num + 2));
cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
cell1.setCellValue("數量");
cell1.setCellStyle(style);
cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
cell2.setCellValue("金額");
cell2.setCellStyle(style);
// 百分比 同上
sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,
(short) (2 * num + 4)));
HSSFCell cellb = row.createCell((short) (2 * num + 3));
cellb.setEncoding(HSSFCell.ENCODING_UTF_16);
cellb.setCellValue("百分比");
cellb.setCellStyle(style);
HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));
HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));
cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);
cellb1.setCellValue("數量");
cellb1.setCellStyle(style);
cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);
cellb2.setCellValue("金額");
cellb2.setCellStyle(style);
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
System.out.print("OK");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
❹ java怎麼以空格,英文逗號和句號拆分一個字元串,一個逗號我會,同時三個該怎麼寫
這個其實很簡單,你要把思維跳出來你就很直觀的發現問題。
日常開發中,必須保持一個思維,找到問題的關鍵點。
我來對這個問題分析下,java拆分,3個關鍵字元拆分,split函數也只能一個個拆分,但是如果一起拆分的話勢必會照成 拆分完畢沒有任何的順序可言。
所以為了保證拆分完的順序,必須只能對一個關鍵字元串進行拆分。
我們可以把,空額,逗號,句號用。repalce(「」「」,"%");替換成 %,然後再把字元串用%號進行拆分,完美解決問題
例如:
String[] s= str.trim().repalce(",","%").repalce("。","%").replace(" ","%").split("%");
沒開編輯器敲的代碼有些問題,大體就是上面的那個意思、、
❺ java如何拆分字元串
java拆分字元串使用string類的spilt方法,針對某個分隔符來分割一個字元串,示例如下:
publicclassStringSplit{
publicstaticvoidmain(String[]args){
StringsourceStr="1,2,3,4,5";//一個字元串
String[]sourceStrArray=sourceStr.split(",");//分割出來的字元數組
for(inti=0;i<sourceStrArray.length;i++){
System.out.println(sourceStrArray[i]);
}
//最多分割出3個字元串
intmaxSplit=3;
sourceStrArray=sourceStr.split(",",maxSplit);
for(inti=0;i<sourceStrArray.length;i++){
System.out.println(sourceStrArray[i]);
}
}
}
輸出結果為:
2
4
1
3,4,5
❻ 如何java將多個同一個execl的不同sheet拆分成不同的execl
推薦使用兩個函數:
match和countif
match用於匹配,如果在sheet1表中的某個單元格輸入公式:=match(a1,sheet2!a:a,0),意思是,在表sheet2中查找a1單元格的內容,如果找到,會返回找到的單元格的行標,如果沒找到,會返回.#n/a,可以判斷sheet1中的哪些項在sheet2中沒有.同理,也可以用sheet2中來索引sheet1
第二個函數是countif,假設條件同上,在sheet1中的某個單元格輸入公式:
=countif(a1,sheet2!a:a),意思是返回sheet2中的第a列中,有多少個值等於sheet1中的a1的單元值.
--沒事多看看幫助.
❼ java拆分數組問題,我想把excel表裡的一個單元格里的內容拆成幾行(內容以空格區分)
for(int n=0;n<listen1.size();n++)
{
labelteacherListen=new Label(lie,hang,listen1.get(n)); //"聽課教師"
sheet.addCell(labelteacherListen);
}
hang++;
你把 hang++ 放到for循環裡面試試。
❽ Java的split()是怎麼拆分字元串的
java拆分字元串使用string類的spilt方法,針對某個分隔符來分割一個字元串,示例如下:
public class StringSplit {
public static void main(String[] args) {
String sourceStr = "1,2,3,4,5";//一個字元串
String[] sourceStrArray = sourceStr.split(",");//分割出來的字元數組
for (int i = 0; i < sourceStrArray.length; i++) {
System.out.println(sourceStrArray[i]);
}
// 最多分割出3個字元串
int maxSplit = 3;
sourceStrArray = sourceStr.split(",", maxSplit);
for (int i = 0; i < sourceStrArray.length; i++) {
System.out.println(sourceStrArray[i]);
}
}
}
輸出結果為:
2
4
1
3,4,5
❾ JAVA如何實現jtable 表頭實現類似Excel篩選功能
用java的JTable實現類似Excel的報表控制項主要需要完成的工作如下:
1. 單元格合並與拆分。
2. 基於JTextArea的渲染器,用來實現多行輸入。
3. 由於採用JTextArea作為渲染器,導致文本只能向左對齊,後來通過重載JTextArea得以實現居中,居右,字體下劃線等效果:)。
4. 滑鼠動態拉行高,拉行寬。
5. 發現行數一多,導致性能下降很歷害,所以實現了只刷新當前可視屏幕區域。
6. 單元格屬性的設定:背景顏色、前景顏色、字體(大小,粗斜體,下劃線,刪除線)、對角線單元格(中國式報表)、邊框線等
7. 列印預覽
8. 列印
9. 自己實現的列印設置對話框(列印水印、列印方向、紙張頁邊距、列印紙張頁數范圍、列印順序、設定列印的頁眉和頁腳、放大列印或縮小列印)
10.往單元格載入圖片,可預覽和列印出來
11.套打模式,在table顯示標尺,並重置行高為1cm,行寬為2cm,以方便使用者對應套打紙張
12.為單元格繪制邊線
13.查找和替換
14.增加行和列,刪除行和列
15.格式刷
16.排序,升和降。可設定優先排序的形式,數值優先或著是中文優先,中文按照拼音排序
17.考貝,復制和貼粘
18.插入圖表,目前只實現了柱狀圖表
19.求和
20.各種熱鍵組合
21.顯示和隱藏table網格線
Java實現jtable 表頭實現類似Excel篩選功能,你可以採取以上步驟進行總結,希望你早日得到答案。
❿ java如何解析excel一個單元格中逗號分隔的數據
可以用jxl,poi來讀取你需要解析的excel,然後用字元串拆分String中的split(";")來拆分,獲取你需要的數據