0

你好,我很难解决这个难题。教授给出了代码并告诉我们更改它以使列头可点击。任何人都可以为我更改它。?浪费了将近 4 个小时 :( 在 java 中不太好摇摆下面是代码...下面是代码:

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, "5@gmail.com", "D", "T" },
            { false, "r@gmail.com", "projhsdject work", "I " },
            { false, "r.@ymail.com", "Job Placement","Iut that" },
            { true, "yam@gmail.com", "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);
}

}
4

2 回答 2

1

教授给出了代码并告诉我们更改它以使列头可点击

JTable.setAutoCreateRowSorter(true)Cat.EG 这是单击列标题后您可能会看到的内容。向上的小箭头表示表格按该列排序。

可点击的表头

于 2013-05-19T04:17:22.890 回答
0

如果您只想通过单击列标题对表进行排序,那么您只需创建自己的表模型并覆盖获取列类函数,例如。

public class TableViewModel extends AbstractTableModel{

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

. . .

然后将您的 JTable 与该 tablemodel 和 sorter 绑定

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

.setRowSorter(排序器);

于 2013-05-19T04:34:44.583 回答