2009-10-23 77 views
0

我已經創建了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

回答

1

你想通過添加一個JList的表來實現呢?這是一個根本錯誤的做法 - JTables根本不打算將組件添加到它們中。如果您希望表格顯示列表中的項目,則需要實現TableModel接口,而不是JList。

編輯: 如果你想成爲彼此相鄰顯示的JList和JTable中,你必須補充說,到滾動前兩者addthem到一個JPanel。但這是一件很不尋常的事情。通常,一個表在它自己的ScrollPane中。您可以爲表格和列表分別設置單獨的ScrollPane。或者你可以簡單地把列表項放在表格的第一列。哪個更好取決於你的要求。

+0

因此,如果我使用TableModel並將表模型和JList添加到滾動中,它們會聚集在一起嗎? – Karen

1

我不確定你想要實現什麼,如果你只想讓表中的第一列顯示像1.1,1.2,1.3等行ID的值,你可以將它們添加到jtable的第一列,甚至可以將該列設置爲不同的w/Renderer。如果這不起作用,那麼你可以嘗試在scrollpane的rowHeader上設置JList,類似於下面。您需要調整行高以適應列表高度,反之亦然。但是,這將實現你想要的,並允許列表滾動與表。祝你好運!

import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import 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); 
} 

}

+0

我需要一個JList,當我點擊一個數字時,會彈出一個面板,顯示該監獄牢房的細節。 – Karen

+0

你可以用一張桌子來做到這一點。基於這些要求,我將按照上述要求實施,但我認爲更清晰的方法是在表格中執行此操作,您可以渲染第一個單元格以顯示它是可點擊的,或者具有與其關聯的操作。您可以將一個columnModelListener或一個ListSelectionListener添加到表中。這些事件將允許你聽桌上的各種事件,讓你實現你想要的。 table.getSelectionModel()。addListSelectionListener('YOUR LISTENER') table.getColumnModel()。addColumnModelListener('YOUR LISTENER') – broschb

0

也許你可以添加一個 「詳細信息」 按鈕,表中的每一行。如果,那麼TableButtonColumn會幫助你。