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

Java JTable-使用Nimbus/System L&;透明;F,java,swing,user-interface,jtable,Java,Swing,User Interface,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

我有一张表格:

    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);
listl=newarraylist();
l、 添加(新元素(1,“一”);
l、 添加(新元素(2,“两”);
l、 添加(新元素(3,“三”);
l、 添加(新元素(4,“四”);
l、 添加(新元素(5,“五”);
l、 添加(新元素(6,“六”);
l、 添加(新元素(7,“七”);
JScrollPane=新的JScrollPane();
窗格。设置不透明(假);
新的空订单(0,0,0,0));
窗格.背景(新颜色(0,0,0,0));
setFont(新字体(“Segoe UI半黑体”,Font.PLAIN,12));
窗格玻璃.立根(3,101,707,297);
MyTableModel tm=新的MyTableModel(l);
表=新的MyTable(tm);
表.setboorder(新的EmptyBorder(0,0,0,0));
表1.set不透明(假);
//table.getTableHeader().setBackground(新颜色(0,0,0,0));
table.getTableHeader().set不透明(true);
table.getTableHeader().setBorder(新的EmptyBorder(0,0,0,0));
表.退根(新颜色(0,0,0,0));
table.setFont(新字体(“Segoe UI半黑体”,Font.PLAIN,12));
表1.SetFillsViewPerthweight(假);
table.getTableHeader().setFont(新字体(“Segoe UI半黑体”,Font.PLAIN,13));
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
窗格。setViewportView(表);
pane.getViewport().setOpaque(false);
table.setGridColor(颜色为灰色);
表.设置显示网格(真);
getContentPane()。添加(窗格);
MyTuple、MyTable和MyTableModel类不设置任何自定义呈现

这就是我的桌子在系统L&F下的样子(我非常喜欢):

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

我想让我的桌子看起来像有L&F系统的桌子。 问题是,如果我像我所希望的那样设置一个L&F,另一个会变得丑陋,我想要一种“兼容性”,有没有办法做到这一点


可能使用UIManager.put()方法?

您忘记了在
滚动窗格的
视口周围设置边框。可能的解决办法:

  • pane.setViewportBorder(null)
  • pane.setViewportBorder(BorderFactory.createEmptyByOrder())
  • pane.setViewportBorder(新的清空顺序(0,0,0,0))
请注意,
pane.getViewport().setOrder(…)
将不起作用,因为
JViewport
实际上没有边框,
setViewportBorder
只是在视口周围绘制边框。()

要使表格标题透明,请执行以下操作:

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

table.getTableHeader().setOpaque(false);

谢谢你的帮助!它现在起作用了。。。但是如果我想让标题也透明呢?我试过这样做:但是对于系统L&F不起作用:table.getTableHeader().setBackground(新颜色(0,0,0,0));table.getTableHeader().set不透明(false);使用setOpaque(false)时无需设置背景色。@LuxxMiner您所做的编辑在nimbus上有效,但在System L上无效&F@camickr我试过了,但是在Nimbus上,如果我不将背景设置为颜色(0,0,0,0),它不会消失。。。