簡體   English   中英

Java JTable - 使用 Nimbus/System L&F 實現透明

[英]Java JTable - Transparence with Nimbus/System L&F

我有這個 JTable:

    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 下的樣子(我真的很喜歡):

系統外觀和感覺

這是我的桌子在 Nimbus L&F 下的樣子(注意添加的大矩形):

Nimbus 外觀和感覺

我希望我的桌子看起來像帶有 System L&F 的桌子。 問題是,如果我按照自己的意願設置一個 L&F,另一個會變得丑陋,我想要一種“兼容性”,有沒有辦法做到這一點?

也許使用UIManager.put()方法?

您忘記設置scrollpane viewport周圍的邊框。 可能的解決方案:

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

請注意, pane.getViewport().setBorder(...)將不起作用,因為JViewport實際上沒有邊框, setViewportBorder只是在視口周圍繪制邊框。 參考

使表頭透明:

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

table.getTableHeader().setOpaque(false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM