2013-05-18 2 views
0

안녕하세요.이 퍼즐을 해결하는 데 어려움이 있습니다. 교수님이 코드를 작성하고 열 머리를 클릭 할 수 있도록 변경하라고 알려 주셨습니다. 누구든지 나를 변경할 수 있습니다.스윙의 JTable 클릭 가능 헤더

package academic.emailClient.view; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.Vector; 
import javax.swing.*; 
import javax.swing.table.*; 
import academic.emailClient.model.Message; 
import academic.emailClient.view.entities.MessageView; 

public class MailBox extends JFrame { 


JTable tableinbox; 

private final int MAILBOX_FRAME_WIDTH = 1080; 
private final int MAILBOX_FRAME_HEIGHT = 650; 
static final boolean VISIBLE = true; 

public MailBox() { 
    Object[] columnNamesinbox = { "Boolean", "Sender", "Subject", "Body" }; 
    Object[][] datainbox = { 
      { false, "[email protected]", "D", "T" }, 
      { false, "[email protected]", "projhsdject work", "I " }, 
      { false, "[email protected]", "Job Placement","Iut that" }, 
      { true, "[email protected]", "s1", "as" } 
      }; 

    DefaultTableModel modelinbox = new DefaultTableModel(datainbox, 
      columnNamesinbox); 
    tableinbox = new JTable(modelinbox) { 

     @Override 
     public Class getColumnClass(int columninbox) { 
      switch (columninbox) { 
      case 0: 
       return Boolean.class; 
      case 1: 
       return String.class; 
      case 2: 
       return String.class; 
      case 3: 
       return String.class; 
      default: 
       return Boolean.class; 
      } 
     } 
    }; 




    tableinbox.setBackground(Color.lightGray); 
    tableinbox.setGridColor(new Color(0,128,0)); 
    JTableHeader inboxheader = tableinbox.getTableHeader(); 
    inboxheader.setBackground(Color.DARK_GRAY); 
    inboxheader.setForeground(Color.white); 

} 


public int getMesssagesCount(int i) { 
    return 0; 
} 

public int GetCheckedItemsNumber(int i) { 
    return 0; 
} 

public Object[][] GetCheckedItems() { 

    return GetCheckedItems(); 
} 

public Object[][] GetMail() { 
    return GetMail(); 
} 

public Object[][] OrderByDate() { 

    return OrderByDate(); 
} 

public Object[][] OrderBySender() { 
    return OrderBySender(); 
} 

public Object[][] OrderBySubject() { 
    return OrderBySubject(); 
} 

public JTable getMailBox() { 
    return tableinbox; 
} 


public void run() { 

    JFrame MailBoxFrame = new JFrame(); 

    MailBoxFrame.setMaximumSize(new Dimension(MAILBOX_FRAME_WIDTH, MAILBOX_FRAME_HEIGHT)); 
    MailBoxFrame.setPreferredSize(new Dimension(MAILBOX_FRAME_WIDTH, MAILBOX_FRAME_HEIGHT)); 
    MailBoxFrame.setBounds(0, 0, MAILBOX_FRAME_WIDTH, MAILBOX_FRAME_HEIGHT); 
    MailBoxFrame.setVisible(VISIBLE); 
    MailBoxFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 
+1

[마우스 수신기 작성 방법] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)을 참조하십시오. 또한 Java 명명 규칙을 따르십시오. 'MailBoxFrame' - 변수 이름은 대문자로 시작하면 안됩니다. 'MAILBOX_FRAME_WIDTH' - "static final"변수 만 완전히 대문자 여야합니다. – camickr

+0

및 int i = inboxheader.columnAtPoint (e.getPoint()); 성공을 위해 휴식입니다. – mKorbel

답변

1

교수 코드를주고

을 열 머리글을 클릭 할 수 있도록 변경하는 우리에게 말했다 : 낭비 거의 4시간 :(아래 자바 스윙에 너무 큰되지는 코드 ... 아래 코드입니다

JTable.setAutoCreateRowSorter(true)를 참조하십시오. EG이 당신이 Cat. 열 머리글을 클릭 한 후 볼 수 있습니다 것입니다. 작은 위쪽 화살표는 테이블이 그 열을 정렬을 나타냅니다.

Clickable table header

0

단지 열 머리글을 클릭하여 테이블을 정렬하려면 고유 한 테이블 모델을 만들고 get 열 클래스 함수를 덮어 씁니다.

public class TableViewModel extends AbstractTableModel{ 

@Override 
public Class<?> getColumnClass(int column) { 
    switch(column) { 
     case 0: 
      return String.class; 
     case 1: 
      return String.class; 

. . .

및 그

TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(<YOURJTABLE>.getModel()); 

.setRowSorter (분류기)하여 해당하는 TableModel 및 분류기와 JTable의 결합 후

;