自定义 Swing 中的 mxGraph JButton Canvas?
mxGraph JButton inside a Custom Swing Canvas?
按照CustomCanvas.java
中的例子
我已经设法使用此代码
为 mxCell 在自定义 Swing canvas 中绘制 JButton
public void drawVertex(mxCellState state, String label)
{
Object value = ((mxCell) state.getCell()).getValue();
Pattern p = (Pattern)value;
System.out.println(p.length);
MyPanel comp = new MyPanel();
rendererPane.paintComponent(g, comp, graphComponent,
(int) (state.getX() + translate.getX()),
(int) (state.getY() + translate.getY()),
(int) state.getWidth(), (int) state.getHeight(), true);
g.setColor(Color.GREEN);
for (int i = 0; i < p.length; i++) {
JButton b = new JButton("");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("click,click");
}
});
rendererPane.paintComponent(g, b, graphComponent,
(int) (state.getX() + translate.getX()+i*state.getWidth()/p.length),
(int) (state.getY() + translate.getY()),
(int) state.getWidth()/p.length, (int) state.getHeight(), true);
}
}
按钮已绘制但无法正常工作,如果我单击它则没有任何反应
如果你想让组件是交互的,你必须把它添加到容器中(它本身被添加到另一个容器中,最终到达一个JFrame)。您现在所拥有的只是将其绘制到一个单元格中。
理论上,您可以向后弯曲以拦截对单元格的点击并将它们转发到 JButton,但这可能不是一种可持续的方法。
按照CustomCanvas.java
中的例子
我已经设法使用此代码
public void drawVertex(mxCellState state, String label)
{
Object value = ((mxCell) state.getCell()).getValue();
Pattern p = (Pattern)value;
System.out.println(p.length);
MyPanel comp = new MyPanel();
rendererPane.paintComponent(g, comp, graphComponent,
(int) (state.getX() + translate.getX()),
(int) (state.getY() + translate.getY()),
(int) state.getWidth(), (int) state.getHeight(), true);
g.setColor(Color.GREEN);
for (int i = 0; i < p.length; i++) {
JButton b = new JButton("");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("click,click");
}
});
rendererPane.paintComponent(g, b, graphComponent,
(int) (state.getX() + translate.getX()+i*state.getWidth()/p.length),
(int) (state.getY() + translate.getY()),
(int) state.getWidth()/p.length, (int) state.getHeight(), true);
}
}
按钮已绘制但无法正常工作,如果我单击它则没有任何反应
如果你想让组件是交互的,你必须把它添加到容器中(它本身被添加到另一个容器中,最终到达一个JFrame)。您现在所拥有的只是将其绘制到一个单元格中。
理论上,您可以向后弯曲以拦截对单元格的点击并将它们转发到 JButton,但这可能不是一种可持续的方法。