2015-01-24 10 views
0

나는 첫 번째 열에 아이콘이 들어있는 JTable입니다. 정렬에 대한 자습서를 읽었으며 아이콘을 정렬하는 방법을 알 수 없습니다.아이콘이 포함 된 JTable 열을 정렬하는 방법은 무엇입니까?

사용자가 열 머리글을 클릭하면 색상별로 정렬해야하는 아이콘이 필요합니다. 아이콘은 녹색, 빨간색 또는 노란색 원입니다.

JTable의 아이콘이 포함 된 열을 어떻게 정렬합니까?

+0

감사합니다 앤드류. 아이콘 동그라미라고 불렀지 만 솔리드 볼처럼 보이고 프로세스의 상태를 나타냅니다. "중지", "이동", "대기". 행은 정렬에서 정렬되는 한 순서는 중요하지 않습니다. 내가 가진 유일한 코드는 레이블을 사용하여 아이콘이있는 셀을 렌더링하는 코드입니다. – Cat

+0

이미 내 코드에 있습니다. 내 jtable에는 정렬 할 수있는 여러 열이 있지만 아이콘이있는 열은 작동하지 않습니다. 아이콘이있는 열에는 자체 정렬 코드가 있어야한다고 생각합니다. – Cat

답변

2

행은 정렬에서 정렬되는 한 순서는 중요하지 않습니다.

단순함 그 자체입니다. table.setAutoCreateRowSorter(true);

이미 내 코드

에 그것은 나를 위해 잘 작동해야합니다. 세 번째 열은 오름차순으로 정렬됩니다.

enter image description here

import java.awt.*; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import javax.swing.table.*; 

import java.net.*; 
import java.util.*; 
import javax.imageio.ImageIO; 

public class HueSort { 

    private JComponent ui = null; 
    BufferedImage[] images; 

    HueSort() throws Exception { 
     initUI(); 
    } 

    public void initUI() throws Exception { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(4, 4, 4, 4)); 

     String[] paths = { 
      "http://i.stack.imgur.com/wCF8S.png", 
      "http://i.stack.imgur.com/T5uTa.png", 
      "http://i.stack.imgur.com/IHARa.png" 
     }; 
     BufferedImage[] images = new BufferedImage[3]; 
     for (int i = 0; i < paths.length; i++) { 
      images[i] = ImageIO.read(new URL(paths[i])); 
     } 
     Random rand = new Random(); 
     String[] headers = { 
      "Image", "Image", "Image", "Image", "Image", "Image", "Image" 
     }; 
     BufferedImage[][] tableImages = new BufferedImage[11][headers.length]; 
     for (int r = 0; r < tableImages.length; r++) { 
      for (int c = 0; c < tableImages[0].length; c++) { 
       int index = rand.nextInt(images.length); 
       tableImages[r][c] = images[index]; 
      } 
     } 
     TableCellRenderer tcr = new DefaultTableCellRenderer() { 
      @Override 
      public Component getTableCellRendererComponent(
        JTable table, 
        Object value, 
        boolean isSelected, 
        boolean hasFocus, 
        int row, 
        int column) { 
       Component c = super.getTableCellRendererComponent(
         table, value, isSelected, hasFocus, row, column); 
       if (c instanceof JLabel) { 
        Image image = (Image) value; 
        JLabel l = (JLabel) c; 
        l.setText(""); 
        l.setIcon(new ImageIcon(image)); 
       } 
       return c; 
      } 
     }; 
     JTable table = new JTable(tableImages, headers) { 
      @Override 
      public Class getColumnClass(int column) { 
       return Image.class; 
      } 
     }; 
     table.setAutoCreateRowSorter(true); 
     table.setDefaultRenderer(Image.class, tcr); 
     table.setRowHeight(34); 
     ui.add(new JScrollPane(table)); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       HueSort o; 
       try { 
        o = new HueSort(); 
        JFrame f = new JFrame("Hue Sort"); 
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
        f.setLocationByPlatform(true); 

        f.setContentPane(o.getUI()); 
        f.pack(); 
        f.setMinimumSize(f.getSize()); 

        f.setVisible(true); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

감사합니다. 내 문제는 행을 추가 할 때 이미지를 설정하는 방법에있었습니다. 아이콘을 버퍼링하고 아이콘을 올바르게 추가 한 후 정렬 작업이 수행되었습니다. 귀하의 모범은 매우 도움이되었습니다. – Cat

관련 문제