这就是我要创建的:
我试图使用JTable使用gui创建一个属性编辑器,其想法是将bean的每个属性放在行中,其中第一列将代表其名称,第二列将显示其值。问题出在属性具有可以表示其值的特定gui组件时,我想在表中显示它,但我不知道如何。 PropertyEditor具有方法getCustomEditor(),该方法返回我需要在表中显示的Component。如果我试图仅在JPanel中显示它,则效果很好,但是当我试图将其放置在表的单元格上时,它却没有效果。
import javax.swing.*;
import java.awt.*;
import java.beans.PropertyEditorManager;
class MyPanel extends JPanel {
public MyPanel() {
this.setLayout(new BorderLayout());
this.add(PropertyEditorManager.findEditor(Color.class).getCustomEditor());
}
}
public class runner {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new MyPanel());
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocation(500,500);
frame.setSize(500,500);
}
}
此代码将在面板上为我提供以下组件: https://ibb.co/8Y7p93F
但是,如果我尝试将其放入表格单元格中,它将无法正常工作
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.beans.PropertyEditor;
import java.beans.PropertyEditorManager;
class MyPanel extends JPanel {
public MyPanel() {
this.setLayout(new BorderLayout());
this.add(PropertyEditorManager.findEditor(Color.class).getCustomEditor());
}
}
public class TableRendererPanel extends JFrame
{
public static void main(String[] args)
{
TableRendererPanel frame = new TableRendererPanel();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
public TableRendererPanel()
{
JTable table = new JTable(5, 3);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
table.setValueAt(new Object(), 1, 0);
table.setDefaultRenderer(Object.class, new MultiLabelRenderer());
}
class MultiLabelRenderer implements TableCellRenderer
{
private MyPanel myPanel;
public MultiLabelRenderer()
{
myPanel = new MyPanel();
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, final int row, final int column)
{
return myPanel;
}
}
}
这是代码的结果 https://ibb.co/4szhmQH
这是我的问题:
1)如何将JPanel放置并呈现到表格单元格中?
2)您知道其他选择吗?例如,在此任务中,我正在考虑GridLayout,但是有了它,我就无法控制行高及其重要性。我知道,我可以使用GridBagLayout来实现我的任务,但是我也知道,这将花费很多时间,等等,这通常是个坏主意。
谢谢