0

我创建了一个 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 当我将表格添加到列表中,然后添加到滚动窗格时,这就是它的外观。如何将它们都添加到滚动窗格中并显示它们?

替代文字 http://img27.imageshack.us/img27/3678/94687555.jpg

这应该是它的样子。。

替代文字 http://img21.imageshack.us/img21/1343/90528093.jpg

4

3 回答 3

1

您想通过将 JList 添加到表中来实现什么?这是一个根本错误的做法——JTable 根本不打算将组件添加到其中。如果希望表格显示列表中的项目,则需要TableModel接口的实现,而不是 JList。

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

于 2009-10-23T11:49:18.480 回答
1

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

导入 java.awt.Dimension;导入 javax.swing.JFrame;导入 javax.swing.JList;导入 javax.swing.JScrollPane;导入 javax.swing.JTable;

公共类滚动{

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);
}

}

于 2009-10-23T13:57:04.220 回答
0

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

于 2009-10-23T16:14:43.147 回答