Avatar of NorthReptile
NorthReptile

asked on 

Multi column jList - have example but need help implementing

I found this code to create a mutli column jList. It works just fine except for the fact it creates a new form.

I'd like to be able to use this component in a more traditional way. i.e. create the multicolumn aspect and mount it to an existing jPanel.

I am struggling to change the code so all i have to do is create my data set, pass it to this class and mount the result to my existing panel.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package northad;
 
/**
 *
 * @author adam
 */
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;
     
     Object thisObject;
     
     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();
     } 
     
}
/*I have found this useful on countless occassions, enjoy*/
/*William_Wilson. §*/

Open in new window

Editors IDEs

Avatar of undefined
Last Comment
Mick Barry

8/22/2022 - Mon