1.我现在做一个SWT项目,有一个主窗体,上面有新建,打开保存等按扭,当我点新建时弹出一个窗口,我应该怎么让弹出的这个窗口最大化后别覆盖我原来的主窗口,而是在他的下面啊?2.还有就是表格怎么进行编辑,如有原码能给小弟一份最好,不胜感激,网上那些太乱了。

解决方案 »

  1.   

    package csdn;import java.awt.BorderLayout;
    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) + "%";
    }
    }楼主看看是不是这样的啊
      

  2.   

    不是哦 ,这样比如下面例子是一张表:名称      价格
    铅笔
    钢笔
    油笔       我要求的是,铅笔,钢笔,油笔也做为表的列column
      

  3.   

    不是哦 ,这样比如下面例子是一张表:名称      价格
    铅笔
    钢笔
    油笔       我要求的是,铅笔,钢笔,油笔也做为表的列column
      

  4.   

    你这里设置铅笔、钢笔,油笔和名称是同一列的,应该不能再把铅笔、钢笔,油笔设置为column啦
      

  5.   

    怎么没人回答呀,名位大虾帮忙回答下吧谢谢, 
    还有,怎么让表格的列向下排呀,他默认是横向排啊,,
    这个你可以把铅笔、钢笔,油笔设置为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,"油笔");
    这样试试
      

  6.   

    有横向就应该有纵向的啊,这个设计真不合理,
    那我给表格加监听的时候怎么让每一行的第一列不能编辑,以下是实现表格可编辑,但是每行每列都可能编辑
    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++;
    }
    }
    });
      

  7.   

    哦上面的问题已解决,呵,把for改一与就行了,
    for (int i=0; i <table.getColumnCount (); i++) { 
    改成
    for (int i=1; i <table.getColumnCount (); i++) { 
    就从第二列开始了,刚想到,第一个问题有朋友知道吗,也就是
    我现在做一个SWT项目,有一个主窗体,上面有新建,打开保存等按扭,当我点新建时弹出一个窗口,我应该怎么让弹出的这个窗口最大化后别覆盖我原来的主窗口,而是在他的下面啊?