我创建了一个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
这应该是什么样的..
答案 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将帮助您。