2015-09-30 2 views
1

У меня есть этот JTable:Java JTable - Transparence с Nimbus/System L & F

List<MyTuple> l= new ArrayList<>(); 
    l.add(new Element(1,"One")); 
    l.add(new Element(2,"Two")); 
    l.add(new Element(3,"Three")); 
    l.add(new Element(4,"Four")); 
    l.add(new Element(5,"Five")); 
    l.add(new Element(6,"Six")); 
    l.add(new Element(7,"Seven")); 

    JScrollPane pane = new JScrollPane(); 
    pane.setOpaque(false); 
    pane.setBorder(new EmptyBorder(0, 0, 0, 0)); 
    pane.setBackground(new Color(0,0,0,0)); 
    pane.setFont(new Font("Segoe UI Semibold", Font.PLAIN, 12)); 
    pane.setBounds(3, 101, 707, 297); 

    MyTableModel tm=new MyTableModel(l); 
    table = new MyTable(tm); 
    table.setBorder(new EmptyBorder(0, 0, 0, 0)); 
    table.setOpaque(false); 
    //table.getTableHeader().setBackground(new Color(0,0,0,0)); 
    table.getTableHeader().setOpaque(true); 
    table.getTableHeader().setBorder(new EmptyBorder(0,0,0,0)); 
    table.setBackground(new Color(0,0,0,0)); 
    table.setFont(new Font("Segoe UI Semibold", Font.PLAIN, 12)); 
    table.setFillsViewportHeight(false); 
    table.getTableHeader().setFont(new Font("Segoe UI Semibold", Font.PLAIN, 13)); 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
    pane.setViewportView(table); 
    pane.getViewport().setOpaque(false); 
    table.setGridColor(Color.GRAY); 
    table.setShowGrid(true); 
    getContentPane().add(pane); 

MyTuple, MYTABLE и MyTableModel классы не устанавливать какие-либо пользовательские рендеринга.

Это как моя таблица выглядит под System L & F (который мне очень нравится):

System LooksAndFeels

Это как моя таблица выглядит под Nimbus L & F (обратите внимание на добавленный большой прямоугольник):

Nimbus LooksAndFeels

Я хочу, чтобы мой стол, чтобы выглядеть, как с системой L & Ф. Проблема в том, что если я устанавливаю один L & F, как я хочу, другой становится уродливым, я хочу своего рода «совместимость», есть ли способ сделать это?

Возможно, используя метод UIManager.put()?

ответ

1

Вы забыли установить границу вокруг viewport из scrollpane. Возможные решения:

  • pane.setViewportBorder(null);
  • pane.setViewportBorder(BorderFactory.createEmptyBorder());
  • pane.setViewportBorder(new EmptyBorder(0, 0, 0, 0));

Обратите внимание, что pane.getViewport().setBorder(...) не будет работать, потому что JViewport фактически не имеет границы, setViewportBorder просто рисует границу вокруг в окне просмотра. (Reference)

Для того, чтобы заголовок таблицы прозрачный:

pane.setColumnHeader(new JViewport()); 
pane.getColumnHeader().setOpaque(false); 

table.getTableHeader().setOpaque(false); 
+0

Спасибо за помощь! теперь это работает ... Но что, если я хотел бы сделать заголовок прозрачным? Я пробовал это: но с System L & F не работает: table.getTableHeader(). setBackground (новый цвет (0,0,0,0)); . Table.getTableHeader() setOpaque (ложь); –

+0

@FrancescoRizzi См. Мое редактирование. Надеюсь, поможет. –

+1

Не нужно устанавливать цвет фона при использовании setOpaque (false). – camickr

Смежные вопросы