❶ 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(";")来拆分,获取你需要的数据