将JList添加到表并将表添加到滚动窗格

时间:2009-10-23 11:38:34

标签: java user-interface jtable jlist

我创建了一个JList,我想将它添加到表中,然后将表添加到滚动窗格中,以便它们都包含在滚动窗格中。

import model.*;
import java.awt. *;
import java.text.*;
import javax.swing.*;
import javax.swing.table.TableColumn;

public class ScrollPanel extends JPanel implements View
{
private Prison prison;
private String[] cells = new String[20];
private JList list = new JList(cells);

public ScrollPanel(Prison prison)
{
    this.prison = prison;
    prison.attach(this);
    setup();
    build(prison);
}

public void setup()
{

}

public void build(Prison prison)
{
    int rows = 20;
    int columns = 2;

    for (int i = 0; i < 20; i++)
    {
        cells[i] = prison.cells().get(i).id();
    }

    JTable table = new JTable(rows, columns);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    TableColumn column = null;
    column = table.getColumnModel().getColumn(0);
    column.setPreferredWidth(91);
    column = table.getColumnModel().getColumn(1);
    column.setPreferredWidth(91);
    table.add(list);
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(220, 150));
    add(scrollPane);
}

public void update()
{ }
}

当我执行上面粘贴的代码时,这就是我的程序看起来的样子,即将列表添加到表中。 alt text http://img21.imageshack.us/img21/3237/11834317.jpg 当我将表添加到列表然后添加到滚动窗格时,这就是它的外观。如何将它们添加到滚动窗格中,并显示两者?

alt text http://img27.imageshack.us/img27/3678/94687555.jpg

这应该是什么样的..

alt text http://img21.imageshack.us/img21/1343/90528093.jpg

3 个答案:

答案 0 :(得分:1)

通过向表中添加JList,您想要实现什么?这是一个根本错误的事情 - JTables根本不打算添加组件。如果希望表显示列表中的项,则需要实现TableModel接口,而不是JList。

修改: 如果希望JList和JTable彼此相邻显示,则必须先将它们添加到JPanel,然后再将其添加到ScrollPane。但这是一件相当不寻常的事情;通常,表位于自己的ScrollPane中。您可以为表和列表分别使用单独的ScrollPane。或者您可以简单地将列表项放在表的第一列中。哪个更好取决于您的要求。

答案 1 :(得分:1)

我不确定你想要实现什么,如果你只想让表中的第一列显示行id如1.1,1.2,1.3等的值,你可以将它们添加到第一列jtable的列,你甚至可以设置与Renderers不同的列。如果这不起作用,那么你可以尝试在滚动窗格的rowHeader上设置JList,类似于下面的内容。您需要调整行高以适应列表高度,反之亦然。但这将实现您想要的功能,并允许列表滚动表格。祝你好运!

import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTable;

public class Scroll {

public static final void main(String[] args){
    JFrame f = new JFrame();
    f.setSize(new Dimension(400,400));
    JList list = new JList(new Object[]{"1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8","1.9","1.10","1.11"});
    JTable table = new JTable(11,10);
    JScrollPane sp = new JScrollPane(table);
    sp.setRowHeaderView(list);
    f.getContentPane().add(sp);
    f.setVisible(true);
}

}

答案 2 :(得分:0)

也许您可以在表格的每一行添加“详细信息”按钮。如果,那么TableButtonColumn将帮助您。