//网格布局
panel.setLayout(new GridLayout(4,4))//指定4行4列
panel.add(new) JButton("1"));
panel.add(new) JButton("2"));//从第一行第一列开始,然后第一行第二列。排满后将从下一行开始排列。
//需要修正
而对于Lingo中矩阵传参到java中,因为相关函数
lng.LSsetPointerLng()
是不能以矩阵为参数的,所以不能直接引用。不过,虽然我不懂其中原理,有个解决方法是将矩阵转化为数组。比如,我的Demo1中可以将矩阵A[ 6 ] [ 8 ] 定义为B[48],原本的矩阵索引规则和按顺序排列是一样的。比如,我想取原本A矩阵的A[2] [5],也就是现在取B矩阵的B[17]。
以我的lng模型为例:
我将运输单价设为固定值,x(运输量)设为将被传递的参数。
建立参数
private void Solve()//运算:赋值
{
int nErr;
Double d1=0.;
double dSumW[] = new double[6];//库存合计
double dSumV[] = new double [8];//客户需求合计
//double dOnDuty[] = new double [6];
double dx[]=new double[48];//x矩阵
double dObj[] = new double [1];//不能传递矩阵;那么只能改成数组了?
double dStatus[] = new double [1];
System.out.println("\nSolving...");
// get the staffing requirements
for ( int i=0; i<8; i++)
{
String s = SumV[i].getText();//需求量赋输入值
try {
dSumV[ i] = d1.valueOf( s);
}
catch ( Exception e)
{
dSumV[ i] = 0.;
}
}
for ( int i=0; i<6; i++)
{
String s = SumW[i].getText();//库存赋输入值
try {
dSumW[ i] = d1.valueOf( s);
}
catch ( Exception e)
{
dSumW[ i] = 0.;
}
}
// clear output fields
for ( int i=0; i<6; i++)//其它先赋空值
{
V1[i].setText( " ");
V2[i].setText( " ");
V3[i].setText( " ");
V4[i].setText( " ");
V5[i].setText( " ");
V6[i].setText( " ");
V7[i].setText( " ");
V8[i].setText( " ");
}
jtfTotal.setText( " ");
传参
nErr = lng.LSsetPointerLng( pnLngEnv, dx, nPointersNow);//矩阵
if ( nErr != lng.LSERR_NO_ERROR_LNG )
{
System.out.println( "***LSsetPointerLng() error***: " + nErr);
return;
}
赋值
for( int i=0;i<6;i++) {
Double d = (double) Math.round(dx[i*8]);
Integer n = d.intValue();
V1[i].setText( n.toString());
}
以上应该写一个列表的,不然很冗余。。。有时间再优化吧。