gpt4 book ai didi

java swing JTable JProgressBar边距

转载 作者:行者123 更新时间:2023-12-04 05:52:22 26 4
gpt4 key购买 nike

我的问题是这样的:
我有一个 JTable,我将一个 JProgressBar 放在一列中,但它填满了整个单元格。

我只想设置 JProgressBar 的大小,以便它显示带有单元格边框的边距。

我的 JProgressBar 代码:

private final JProgressBar b;
public ProgressBarRender(){
super();
setOpaque(true);
b = new JProgressBar();

b.setStringPainted(true);
b.setMinimum(0);
b.setMaximum(100);

b.setBorderPainted(true);
b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
//b.setPreferredSize(new Dimension(1,1));
b.setOpaque(true);
//TODO
//b.setForeground(Color.magenta);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Integer i = (Integer) value;
b.setValue(i);
return b;
}

我已经调用了 JProgressBar 的 setPreferredSize 方法,但它不起作用。
我也调用了 JTable 的 setIntercellSpacing 方法,但是当 JTable'row 选择的背景没有显示在空间中时,这不是我想要的。
谁能帮我?

最佳答案

单元格渲染器将填充整个单元格,直到您实现 TableUI 类。
setPreferredSize() 不工作的原因是因为单元渲染器没有使用首选大小。并且首选大小不应永远显式设置,应覆盖 getPreferredSize() 方法。

添加边距很简单,只需将进度条放入面板,然后将边框设置为面板即可。如果您想在选择或取消选择时使用不同的颜色,您也需要实现它。

以下是代码。

public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(800, 600);

JTable table = new JTable(new Object[][]{{50, 50},{50, 50}} , new Object[]{"1", "2"});
table.setDefaultRenderer(Object.class, new ProgressBarRender());
frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);

frame.setVisible(true);
}

public static class ProgressBarRender extends DefaultTableCellRenderer
{
private final JPanel panel;
private final JProgressBar b;

public ProgressBarRender()
{
super();
setOpaque(true);
b = new JProgressBar();

b.setStringPainted(true);
b.setMinimum(0);
b.setMaximum(100);

b.setBorderPainted(true);
b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
//b.setPreferredSize(new Dimension(1,1));
b.setOpaque(true);

panel = new JPanel(new BorderLayout());
panel.add(b, BorderLayout.CENTER);
panel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));

//TODO
//b.setForeground(Color.magenta);
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
Integer i = (Integer)value;
b.setValue(i);
if (isSelected)
{
b.setBackground(Color.BLUE);
panel.setBackground(Color.DARK_GRAY);
}
else
{
b.setBackground(Color.GREEN);
panel.setBackground(Color.LIGHT_GRAY);
}
return panel;
}
}

关于java swing JTable JProgressBar边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com