![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
![]() |

|
| Programming tutorials All Knowledge Info and links to posted here |
![]() |
|
Java: Multi-Column JList (swing)
|
LinkBack | Thread Tools | Display Modes |
|
|
#1 (permalink) |
|
Administrator
Posts: 876
Join Date: Oct 2005
Rep Power: 10
IM:
|
*Note the column size will automatically become the size of the longest string, or largest picture, etc. This example will show how to construct a JList with 3 columns, to add or remove is a simple editing job, as i'm sure you will notice the pattern in the code. To approach this we will need a CellRenderer, since the setup of this particular method will not change, it merely displays the components as we describe, this method will be static. The CellRenderer will more specifically a listcellrenderer and will implement JLabels for the entries of each column. (Do not worry, the labels will not be grey) CODE EXAMPLE: import java.io.*; import java.awt.*; import java.util.*; import java.text.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class MultiColumn{ JFrame jf; JScrollPane scroll; JList list; String[][] columnData; public MultiColumn(){ //create the frame and JList JPanel jf = new aFrame(); //create element List array addElements(); //set list for JList list.setListData(columnData); //create Renderer and dislpay list.setCellRenderer(new MyCellRenderer()); } public void addElements(){ //first number is number of rows, second is number of columns columnData = new String[4][3]; //static setting of String[][] columnData[0][0] = "William"; columnData[0][1] = "A"; columnData[0][2] = "Wilson"; //dynamic setting of String[][] for(int i=1;i<4;i++){ columnData[i][0] = "William"; columnData[i][1] = String.valueOf(i*13); Calendar c = new GregorianCalendar(); columnData[i][2] = ((Date)c.getTime()).toString(); } } public class aFrame extends JFrame{ public aFrame(){ super("Multi-Column JList Example"); getContentPane().add(new PanelBuilder()); // display rules setResizable(true); setLocation(250,50); setBackground(Color.lightGray); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(650, 400); setVisible(true); } private class PanelBuilder extends JPanel{ public PanelBuilder(){ GridBagLayout layout = new GridBagLayout(); GridBagConstraints layoutConstraints = new GridBagConstraints(); setLayout(layout); scroll = new JScrollPane(); list = new JList(); layoutConstraints.gridx = 0; layoutConstraints.gridy = 0; layoutConstraints.gridwidth = 1; layoutConstraints.gridheight = 1; layoutConstraints.fill = GridBagConstraints.BOTH; layoutConstraints.insets = new Insets(1, 1, 1, 1); layoutConstraints.anchor = GridBagConstraints.CENTER; layoutConstraints.weightx = 1.0; layoutConstraints.weighty = 1.0; scroll = new JScrollPane(list,JScrollPane.VERTICAL_SCROLLBAR_AS _NEEDED, JScrollPane. HORIZONTAL_SCROLLBAR_NEVER); layout.setConstraints(scroll, layoutConstraints); add(scroll); } } } static class MyCellRenderer extends JPanel implements ListCellRenderer{ JLabel left, middle, right; MyCellRenderer() { setLayout(new GridLayout(1, 3)); left = new JLabel(); middle = new JLabel(); right = new JLabel(); left.setOpaque(true); middle.setOpaque(true); right.setOpaque(true); add(left); add(middle); add(right); } public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus){ String leftData = ((String[])value)[0]; String middleData = ((String[])value)[1]; String rightData = ((String[])value)[2]; left.setText(leftData); middle.setText(middleData); right.setText(rightData); if(isSelected){ left.setBackground(list.getSelectionBackground()); left.setForeground(list.getSelectionForeground()); middle.setBackground(list.getSelectionBackground() ); middle.setForeground(list.getSelectionForeground() ); right.setBackground(list.getSelectionBackground()) ; right.setForeground(list.getSelectionForeground()) ; } else{ left.setBackground(list.getBackground()); left.setForeground(list.getForeground()); middle.setBackground(list.getBackground()); middle.setForeground(list.getForeground()); right.setBackground(list.getBackground()); right.setForeground(list.getForeground()); } setEnabled(list.isEnabled()); setFont(list.getFont()); return this; } } public static void main(String args[]){ MultiColumn jf = new MultiColumn(); } } *NOTE all the imports are not necessary, but odds are in a program using such a setup, you will need them anyway. Hopefully this code is clear, but the main things to understand is the columns are elements in a 2D array, the list selection needs to be set, and then apply the cell renderer, and it uses this list selection to create the list. |
|
|
|
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| maria sharapova swing xxx | sasanlin | Game Cheats | 0 | 18-Oct-2008 08:25 AM |
| Java JDBC Tutorials - Topics include Java, Database, JDBC, Driver, ODBC and more! | Anilrgowda | Graphic tutorials | 0 | 04-Sep-2007 01:02 AM |
| Is windows XP pro a multi user OS? if yes, How do i enable the multi user feature. | Anilrgowda | Microsoft Windows xp error | 1 | 15-Feb-2007 02:44 AM |
| The Javalog.txt file is created in the Windows\Java folder when Java logging is enabl | Anilrgowda | Microsoft windows vista error | 0 | 29-Jan-2007 10:09 AM |
| Java Swing Introduction Tutorial | Anilrgowda | Graphic tutorials | 0 | 21-Dec-2006 01:48 AM |