我有一个名为 searchResults
的 jTable
,它包含在 jScrollPane (jScrollPane1)
内。
我想删除所有不存在单元格的不必要背景,如下图所示。
我已经尝试过这个,但它只会使背景颜色变成白色(显然)。
jScrollPane1.getViewport().setBackground(Color.WHITE);
searchResults.setOpaque(false);
jScrollPane1.setOpaque(false);
请帮助我解决问题,并告诉我在 Netbeans ide 中的何处插入建议的代码片段。
我已经有一个窗口加载操作监听器,我希望在其中放置代码。
最佳答案
使用jScrollPane1.getViewport().setOpaque(false);对我来说效果很好
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/