首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能分类JTable.Jave

我不能分类JTable.Jave
EN

Stack Overflow用户
提问于 2017-11-12 17:46:53
回答 1查看 49关注 0票数 0

当我单击列时,排序的结果是错误的:

这是我的代码:

代码语言:javascript
复制
DefaultTableModel tableModel = new DefaultTableModel(data, columns) {

        @Override
        public boolean isCellEditable(int row, int column) {
            //all cells false
            return false;
        }
    };
    JTable table = new JTable();
    table.setModel(tableModel);

    //Sort table
    table.setAutoCreateRowSorter(true);

下面是列和数据的代码:

couponArray:它是对象

代码语言:javascript
复制
        // Columns of table
    String[] columns = {"Name of Coupon Provider", "Name of product", "Price of product",
            "Discount rate of the coupon (%)", "Final price", "Expiration Period", "Status of a coupon"};

    //Data of table
    int lengthArray = couponArray.size();
    String data[][] = new String [lengthArray][7];
    for (int i = 0; i < lengthArray; i++){
        Coupon sTmp = (Coupon)couponArray.get(i);
        data[i][0] = sTmp.getNameOfCouponProvider();
        data[i][1] = sTmp.getNameOfProduct();
        data[i][2] = Double.toString(sTmp.getPriceOfProduct());
        data[i][3] = Integer.toString(sTmp.getDiscountRateOfCoupon());

        //Get final price
        double finalPrice = sTmp.getPriceOfProduct() -
                sTmp.getPriceOfProduct()*((double)sTmp.getDiscountRateOfCoupon()/100);
        data[i][4] = new Formatter().format("%.2f", finalPrice).toString();
        data[i][5] = Integer.toString(sTmp.getExpirationPeriod());
        data[i][6] = sTmp.getStatusOfCoupon();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 06:28:20

见下面的解决方案。现在对“产品价格”进行了正确排序。主要更改是覆盖表模型中的getColumnClass()。随着这一变化,“产品价格”价值被视为数字。早些时候,它们被视为字符串。

我还将数据数组的类型更改为Object。并将双值设置为datai,而不将其转换为String。

代码语言:javascript
复制
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.util.Arrays;
import java.util.Formatter;
import java.util.List;

public class TableSorting
{
  public static void main(String[] args)
  {
    // Columns of table
    String[] columns = {"Name of Coupon Provider", "Name of product", "Price of product",
        "Discount rate of the coupon (%)", "Final price", "Expiration Period", "Status of a coupon"};

    //Data of table
    List<Coupon> couponArray = Arrays.asList(
        new Coupon("aaa", "bbb", 100.2, 1, 1, "a"),
        new Coupon("aaa", "bbb", 60.2, 1, 1, "a"),
        new Coupon("aaa", "bbb", 160.4, 1, 1, "a"),
        new Coupon("aaa", "bbb", 220.2, 1, 1, "a"),
        new Coupon("aaa", "bbb", 70.2, 1, 1, "a"),
        new Coupon("aaa", "bbb", 150.2, 1, 1, "a"),
        new Coupon("aaa", "bbb", 160.3, 1, 1, "a"),
        new Coupon("aaa", "bbb", 210.3, 1, 1, "a"));

    int lengthArray = couponArray.size();
    Object data[][] = new Object[lengthArray][7];
    for (int i = 0; i < lengthArray; i++){
      Coupon sTmp = couponArray.get(i);
      data[i][0] = sTmp.getNameOfCouponProvider();
      data[i][1] = sTmp.getNameOfProduct();
      data[i][2] = sTmp.getPriceOfProduct();//Double.toString(sTmp.getPriceOfProduct());
      data[i][3] = Integer.toString(sTmp.getDiscountRateOfCoupon());

      //Get final price
      double finalPrice = sTmp.getPriceOfProduct() -
          sTmp.getPriceOfProduct()*((double)sTmp.getDiscountRateOfCoupon()/100);
      data[i][4] = new Formatter().format("%.2f", finalPrice).toString();
      data[i][5] = Integer.toString(sTmp.getExpirationPeriod());
      data[i][6] = sTmp.getStatusOfCoupon();
    }

    DefaultTableModel tableModel = new DefaultTableModel(data, columns) {

      @Override
      public boolean isCellEditable(int row, int column) {
        //all cells false
        return false;
      }

      //This makes values in "Price" column treated as numerical values
      // instead of String values.
      @Override
      public Class<?> getColumnClass(int columnIndex)
      {
        if (columnIndex == 2)
        {
          return Double.class;
        }
        return super.getColumnClass(columnIndex);
      }
    };
    JTable table = new JTable();
    table.setModel(tableModel);

    //Sort table
    table.setAutoCreateRowSorter(true);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
  }
}

class Coupon
{
  private String nameOfCouponProvider;
  private String nameOfProduct;
  private double priceOfProduct;
  private int discountRateOfCoupon;
  private int expirationPeriod;
  private String statusOfCoupon;

  Coupon(String nameOfCouponProvider, String nameOfProduct,
         double priceOfProduct, int discountRateOfCoupon,
         int expirationPeriod, String statusOfCoupon)
  {
    this.nameOfCouponProvider = nameOfCouponProvider;
    this.nameOfProduct = nameOfProduct;
    this.priceOfProduct = priceOfProduct;
    this.discountRateOfCoupon = discountRateOfCoupon;
    this.expirationPeriod = expirationPeriod;
    this.statusOfCoupon = statusOfCoupon;
  }

  String getNameOfCouponProvider() { return nameOfCouponProvider; }
  String getNameOfProduct() { return nameOfProduct; }
  double getPriceOfProduct() { return priceOfProduct; }
  int getDiscountRateOfCoupon() { return discountRateOfCoupon; }
  int getExpirationPeriod() { return expirationPeriod; }
  String getStatusOfCoupon() { return statusOfCoupon; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47251957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档