Username: Save?
Password:
Home Forum Links Search Login Register*
    News: Welcome to the TechnoWorldInc! Community!
Recent Updates
[April 24, 2024, 11:48:22 AM]

[April 24, 2024, 11:48:22 AM]

[April 24, 2024, 11:48:22 AM]

[April 24, 2024, 11:48:22 AM]

[April 03, 2024, 06:11:00 PM]

[April 03, 2024, 06:11:00 PM]

[April 03, 2024, 06:11:00 PM]

[April 03, 2024, 06:11:00 PM]

[March 06, 2024, 02:45:27 PM]

[March 06, 2024, 02:45:27 PM]

[March 06, 2024, 02:45:27 PM]

[March 06, 2024, 02:45:27 PM]

[February 14, 2024, 02:00:39 PM]
Subscriptions
Get Latest Tech Updates For Free!
Resources
   Travelikers
   Funistan
   PrettyGalz
   Techlap
   FreeThemes
   Videsta
   Glamistan
   BachatMela
   GlamGalz
   Techzug
   Vidsage
   Funzug
   WorldHostInc
   Funfani
   FilmyMama
   Uploaded.Tech
   MegaPixelShop
   Netens
   Funotic
   FreeJobsInc
   FilesPark
Participate in the fastest growing Technical Encyclopedia! This website is 100% Free. Please register or login using the login box above if you have already registered. You will need to be logged in to reply, make new topics and to access all the areas. Registration is free! Click Here To Register.
+ Techno World Inc - The Best Technical Encyclopedia Online! » Forum » THE TECHNO CLUB [ TECHNOWORLDINC.COM ] » Programming Zone » JAVA
 Java: Multi-Column JList (swing)
Pages: [1]   Go Down
  Print  
Author Topic: Java: Multi-Column JList (swing)  (Read 5525 times)
Admin
Administrator
Adv. Member
*****



Karma: 208
Offline Offline

Posts: 496

TWI Admin

159511729 vatsal2002 superwebchampz
View Profile WWW
Java: Multi-Column JList (swing)
« Posted: January 01, 2007, 02:20:09 AM »


Ever wanted an aligned multi-column JList that allowed all columns to be selected as a single entry? Here's how.

*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:

Code:
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.

Logged

Pages: [1]   Go Up
  Print  
 
Jump to:  

Copyright © 2006-2023 TechnoWorldInc.com. All Rights Reserved. Privacy Policy | Disclaimer
Page created in 0.158 seconds with 24 queries.