有横向就应该有纵向的啊,这个设计真不合理, 那我给表格加监听的时候怎么让每一行的第一列不能编辑,以下是实现表格可编辑,但是每行每列都可能编辑 table.addListener (SWT.MouseDown, new Listener () { public void handleEvent (Event event) { Rectangle clientArea = table.getClientArea (); Point pt = new Point (event.x, event.y); int index = table.getTopIndex (); while (index < table.getItemCount ()) { boolean visible = false; final TableItem item = table.getItem (index); for (int i=0; i<table.getColumnCount (); i++) { Rectangle rect = item.getBounds (i); if (rect.contains (pt)) { final int column = i; final Text text = new Text (table, SWT.NONE); Listener textListener = new Listener () { public void handleEvent (final Event e) { switch (e.type) { case SWT.FocusOut: item.setText (column, text.getText ()); text.dispose (); break; case SWT.Traverse: switch (e.detail) { case SWT.TRAVERSE_RETURN: item.setText (column, text.getText ()); //FALL THROUGH case SWT.TRAVERSE_ESCAPE: text.dispose (); e.doit = false; } break; } } }; text.addListener (SWT.FocusOut, textListener); text.addListener (SWT.Traverse, textListener); editor.setEditor (text, item, i); text.setText (item.getText (i)); text.selectAll (); text.setFocus (); return; } if (!visible && rect.intersects (clientArea)) { visible = true; } } if (!visible) return; index++; } } });
哦上面的问题已解决,呵,把for改一与就行了, for (int i=0; i <table.getColumnCount (); i++) { 改成 for (int i=1; i <table.getColumnCount (); i++) { 就从第二列开始了,刚想到,第一个问题有朋友知道吗,也就是 我现在做一个SWT项目,有一个主窗体,上面有新建,打开保存等按扭,当我点新建时弹出一个窗口,我应该怎么让弹出的这个窗口最大化后别覆盖我原来的主窗口,而是在他的下面啊?
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;public class tableTest
{ private static JTable table; /**
* @param args
*/
public static void main(String[] args)
{ tabFrame frame = new tabFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class tabFrame extends JFrame
{
private JTable table; public tabFrame()
{
setTitle("表格模型测试");
setSize(400, 300);
getContentPane().setLayout(null); final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(65, 10, 255, 201);
getContentPane().add(scrollPane); TableModel model = new InvestmentTableModel(30, 5, 10); // 创建表格模型对象
table = new JTable(model); // 创建表格,载入表格模型
scrollPane.setViewportView(table); // 在滚动框中加入表格
}
}/**
* 表格模型类
*/
class InvestmentTableModel extends AbstractTableModel
{
private int years;
private int minRate;
private int maxRate;
private static double INITIAL_BALANCE = 100000.0; public InvestmentTableModel(int y, int r1, int r2)
{
years = y;
minRate = r1;
maxRate = r2;
} /**
* 设置行数
*/
public int getRowCount()
{
return years;
} /**
* 设置列数
*/
public int getColumnCount()
{
return maxRate - minRate + 1;
} /**
* 填充各单元格值
*/
public Object getValueAt(int r, int c)
{
double rate = (c + minRate) / 100.0;
int nperiods = r;
double futurBalance = INITIAL_BALANCE * Math.pow(1 + rate, nperiods);
return String.format("%.2f", futurBalance);
} /**
* 设定列名
*/
public String getColumnName(int c)
{
return (c + minRate) + "%";
}
}楼主看看是不是这样的啊
铅笔
钢笔
油笔 我要求的是,铅笔,钢笔,油笔也做为表的列column
铅笔
钢笔
油笔 我要求的是,铅笔,钢笔,油笔也做为表的列column
还有,怎么让表格的列向下排呀,他默认是横向排啊,,
这个你可以把铅笔、钢笔,油笔设置为item的第一个column的值,比如:
Table table=new Table(shell,SWT.NONE);
TableColumn column1=new TableColumn(table,SWT.NONE);
column1.setText("名称");
//创建第二列
TableColumn column2=new TableColumn(table,SWT.NONE);
column2.setText("价格");
//创建铅笔、钢笔,油笔数据项
TableItem item1=new TableItem(table,SWT.NONE);
item1.setText(0,"铅笔");
TableItem item2=new TableItem(table,SWT.NONE);
item2.setText(0,"钢笔");
TableItem item3=new TableItem(table,SWT.NONE);
item3.setText(0,"油笔");
这样试试
那我给表格加监听的时候怎么让每一行的第一列不能编辑,以下是实现表格可编辑,但是每行每列都可能编辑
table.addListener (SWT.MouseDown, new Listener () {
public void handleEvent (Event event) {
Rectangle clientArea = table.getClientArea ();
Point pt = new Point (event.x, event.y);
int index = table.getTopIndex ();
while (index < table.getItemCount ()) {
boolean visible = false;
final TableItem item = table.getItem (index);
for (int i=0; i<table.getColumnCount (); i++) {
Rectangle rect = item.getBounds (i);
if (rect.contains (pt)) {
final int column = i;
final Text text = new Text (table, SWT.NONE);
Listener textListener = new Listener () {
public void handleEvent (final Event e) {
switch (e.type) {
case SWT.FocusOut:
item.setText (column, text.getText ());
text.dispose ();
break;
case SWT.Traverse:
switch (e.detail) {
case SWT.TRAVERSE_RETURN:
item.setText (column, text.getText ());
//FALL THROUGH
case SWT.TRAVERSE_ESCAPE:
text.dispose ();
e.doit = false;
}
break;
}
}
};
text.addListener (SWT.FocusOut, textListener);
text.addListener (SWT.Traverse, textListener);
editor.setEditor (text, item, i);
text.setText (item.getText (i));
text.selectAll ();
text.setFocus ();
return;
}
if (!visible && rect.intersects (clientArea)) {
visible = true;
}
}
if (!visible) return;
index++;
}
}
});
for (int i=0; i <table.getColumnCount (); i++) {
改成
for (int i=1; i <table.getColumnCount (); i++) {
就从第二列开始了,刚想到,第一个问题有朋友知道吗,也就是
我现在做一个SWT项目,有一个主窗体,上面有新建,打开保存等按扭,当我点新建时弹出一个窗口,我应该怎么让弹出的这个窗口最大化后别覆盖我原来的主窗口,而是在他的下面啊?