2013-08-21 70 views
9

Tôi đang sử dụng JScrollPane để bọc JTable. Tùy thuộc vào cấu hình, có một số không gian không bị chiếm bởi bảng. Nó được vẽ màu xám (có vẻ như nó trong suốt và bạn chỉ có thể thấy thành phần ở phía sau). Làm cách nào để đặt vùng này là màu nhất định?JTable trong JScrollPane, làm thế nào để thiết lập nền?

Đây là một SSCCE để minh họa.

import java.awt.Color; 
import java.util.Vector; 

import javax.swing.JDialog; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 

public class DialogDemo extends JDialog { 
    public static void main(final String[] args) { 
     final DialogDemo diag = new DialogDemo(); 
     diag.setVisible(true); 
    } 

    public DialogDemo() { 
     super(); 
     setTitle("SSCCE"); 

     final Vector<Vector<String>> rowData = new Vector<Vector<String>>(); 
     final Vector<String> columnNames = new VectorBuilder<String>().addCont("Property").addCont("Value"); 
     rowData.addElement(new VectorBuilder<String>().addCont("lorem").addCont("ipsum")); 
     rowData.addElement(new VectorBuilder<String>().addCont("dolor").addCont("sit amet")); 
     rowData.addElement(new VectorBuilder<String>().addCont("consectetur").addCont("adipiscing elit.")); 
     rowData.addElement(new VectorBuilder<String>().addCont("Praesent").addCont("posuere...")); 

     final JTable table = new JTable(rowData, columnNames); 
     JScrollPane pane = new JScrollPane(table); 

     // ************* make that stuff white! ******************* 
     table.setBackground(Color.white); 
     table.setOpaque(true); 
     pane.setBackground(Color.white); 
     pane.setOpaque(true); 
     // ************* make that stuff white! ******************* 

     add(pane); 
     pack(); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    } 

    class VectorBuilder<T> extends Vector<T> { 
     public VectorBuilder<T> addCont(final T elem) { 
      addElement(elem); 
      return this; 
     } 
    } 
} 

Và tại đây bạn có thể thấy khu vực mà tôi muốn "tô màu". Trong SSCCE, tôi cố gắng làm điều đó bằng cách sử dụng setOpaque(boolean)setBackgroundColor(Color) của bảng và ngăn cuộn, không thành công.

enter image description here

Bạn có thể cho tôi biết, tôi đang làm gì sai?

Trả lời

22

Thay vì điều này:

table.setBackground(Color.white); 
table.setOpaque(true); 
pane.setBackground(Color.white); 
pane.setOpaque(true); 

gọi:

pane.getViewport().setBackground(Color.WHITE); 
+1

JScrollPane không thể đục – mKorbel

+0

@mKorbel Interesty. ..Tại sao phương pháp đó lại tồn tại? –

+0

[xem tại đây] (http://stackoverflow.com/a/18275877/714968) cho JTable, câu hỏi insteresting này đã được hỏi cô ấy một vài lần, tôi không biết trả lời – mKorbel

0

Không sử dụng Opaque, hãy thử này:

pane.getViewport().setBackground(Color.WHITE); 
Các vấn đề liên quan