java - 如何删除 Netbeans java 中滚动 Pane 的背景并允许包含面板的背景可见

标签 java image swing netbeans background

我有一个名为 searchResultsjTable,它包含在 jScrollPane (jScrollPane1) 内。
我想删除所有不存在单元格的不必要背景,如下图所示。

enter image description here

我已经尝试过这个,但它只会使背景颜色变成白色(显然)。

jScrollPane1.getViewport().setBackground(Color.WHITE);
searchResults.setOpaque(false);
jScrollPane1.setOpaque(false);

请帮助我解决问题,并告诉我在 Netbeans ide 中的何处插入建议的代码片段。
我已经有一个窗口加载操作监听器,我希望在其中放置代码。

最佳答案

使用jScrollPane1.getViewport().setOpaque(false);对我来说效果很好

screenshot

import java.awt.*;
import java.awt.image.*;
import java.util.Objects;
import javax.swing.*;
import javax.swing.table.*;

public class TransparantTableTest {
  public JComponent makeUI() {
    JTable searchResults = new JTable(new DefaultTableModel(5, 3));
    searchResults.setOpaque(false);
    //searchResults.setFillsViewportHeight(true);

    JScrollPane jScrollPane1 = new JScrollPane(searchResults);
    jScrollPane1.setOpaque(false);
    jScrollPane1.getViewport().setOpaque(false);
    //jScrollPane1.getViewport().setBackground(Color.WHITE);

    jScrollPane1.setBorder(BorderFactory.createEmptyBorder());

    TexturePaint texture = makeCheckerTexture();
    JPanel p = new JPanel(new BorderLayout()) {
      @Override protected void paintComponent(Graphics g) {
        if (Objects.nonNull(texture)) {
          Graphics2D g2 = (Graphics2D) g.create();
          g2.setPaint(texture);
          g2.fillRect(0, 0, getWidth(), getHeight());
          g2.dispose();
        }
        super.paintComponent(g);
      }
    };
    p.setOpaque(false);
    p.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    p.add(jScrollPane1);
    return p;
  }
  protected static TexturePaint makeCheckerTexture() {
    int cs = 6;
    int sz = cs * cs;
    BufferedImage img = new BufferedImage(sz, sz, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = img.createGraphics();
    g2.setPaint(new Color(100, 100, 100, 50));
    g2.fillRect(0, 0, sz, sz);
    for (int i = 0; i * cs < sz; i++) {
      for (int j = 0; j * cs < sz; j++) {
        if ((i + j) % 2 == 0) {
          g2.fillRect(i * cs, j * cs, cs, cs);
        }
      }
    }
    g2.dispose();
    return new TexturePaint(img, new Rectangle(sz, sz));
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new TransparantTableTest().makeUI());
      f.setSize(320, 240);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}

关于java - 如何删除 Netbeans java 中滚动 Pane 的背景并允许包含面板的背景可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43675985/

相关文章:

java - 如何在java中的图像上绘制符号(正确或错误)?

JAVA - Xuggler - 结合 MP3 音频文件和 MP4 电影

java - jFreeChart。组合图表错误内子图的高度?

php - 图像保存到文件夹但路径未保存在sql中

java - Oracle SQL/Java : Get the size of returned dataset from a query

python - Python 中的 PIL 提示 PixelAccess 没有 'size' 属性,我做错了什么?

c++ - 我应该使用哪个 Qt 类来表示矩形上的图像?

java - JFrame控制台/输入并显示文本

java - Borderlayout 中 JPanel 之间的空白

java - Java 的 Netty 和 GUI