2010-07-02 12 views
19

Tôi có trên trình kết xuất ô tùy chỉnh và muốn xóa đường viền của ô.
Tôi có thể làm như thế nào? Tôi đã thử setBorder nhưng nó không hoạt động.xóa các đường viền ô trong jtable

Đây là mã renderer của tôi:

public class MyTableCellRenderer extends DefaultTableCellRenderer { 

    private static final long serialVersionUID = -1195682136616306875L; 

    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 (!isSelected) { 
      if (row % 2 == 0 && row != 1) { 
       c.setBackground(new Color(255, 255, 150)); 
      } else { 
       c.setBackground(Color.WHITE); 
      } 
     } else { 
      c.setBackground(new Color(255, 230, 255)); 
     } 
     c.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
     return c; 
    } 
} 

Trả lời

48

Các dòng rút ra giữa các tế bào không phải là một phần của các tế bào thân. Chúng được vẽ bởi cái bàn. Bạn có thể tắt chúng cho toàn bộ bảng với:

table.setShowGrid(false); 

Để vô hiệu hóa chỉ ngang hoặc chỉ đường dọc:

table.setShowHorizontalLines(false); 
table.setShowVerticalLines(false); 

Hoặc, bạn có thể thay đổi màu sắc của các dòng với:

table.setGridColor(color) 
+0

setShowXX() đã làm việc cho tôi cảm ơn. – harshit

+1

Bạn có thể thực hiện cả hai cùng một lúc với [setShowGrid()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setShowGrid (boolean)) –

+0

@WimDeblauwe Cảm ơn, tôi đã bỏ lỡ một số –

2

Tôi không biết làm thế nào mã của bạn biên dịch vì chỉ Swing thành phần có thể có một biên giới và lớp Component không có một phương pháp() setBorder.

Khi tôi ghi đè lên các renderer mặc định tôi sử dụng một cái gì đó như:

Class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(
     JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     this.setBorder (BorderFactory.createBevelBorder (EtchedBorder.RAISED)); 
     return this; 
    } 
} 
+0

Tôi có thể đặt tất cả các loại Biên giới ngoại trừ emptyBorder. – harshit

+2

Và bạn mong đợi điều gì khi bạn sử dụng một EmptyBorder? Làm thế nào để bạn biết nó không hoạt động. Nó hoạt động tốt cho tôi, văn bản là lên chống lại cạnh trái thay vì được thụt vào bởi 1 pixel vì Border mặc định. – camickr

+0

rất đẹp, cảm ơn +1 – mKorbel