我想在JPanel上绘制图形。现在,我正在做的是,我使用paintComponent方法来定义绘图:
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(10,10,100,100);
}
然后,无论我想放置图形,我都会调用repaint()。
但是我想知道是否有一种方法可以将JP添加到JPanel,就像添加组件而不使用这个paintComponent方法一样:panel.add(myComponent)。我看到无法启动Graphics类型,但可能还有其他类型可以让我这样做。
我很确定很多GUI如FANG Engine都有这个选项,但我在Swing看到的所有例子都使用了这种方法。没有这个的建议吗?因为它有时会弄乱我的程序的整体设计。
提前致谢。
答案 0 :(得分:4)
最简单的方法是创建一个自定义Icon对象,该对象负责您的绘画。然后,您可以通过JLabel将您的图标添加到面板(或将其放在按钮或任何其他带图标的组件上),同时抽象出绘画作品。
答案 1 :(得分:3)
您可以查看图像和缓冲图像apis。除了paintcomponent和graphics g之外,您还可以通过很多方式生成和处理缓冲图像。我想如果你生成缓冲图像,然后将它们加载到你的JPanel上,你将能够获得类似的效果。您可以使用setRGB方法绘制所需的内容。它不像绘画方法那样通用,但它是另一种选择。
答案 2 :(得分:0)
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
JPanel viewportPanelTop = new JPanel();
JPanel viewportPanelBottom = new JPanel();
JPanel viewportPanelCenter = new JPanel();
viewportPanelCenter.setBackground(Color.black);
viewportPanelCenter.setPreferredSize(new Dimension(600, 400));
JPanel viewportPanelWest = new JPanel();
JPanel viewportPanelEast = new JPanel();
JFrame frame = new JFrame();
frame.setTitle("JFrame");
frame.setLocation(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(viewportPanelTop, BorderLayout.NORTH);
frame.add(viewportPanelWest, BorderLayout.WEST);
frame.add(viewportPanelCenter, BorderLayout.CENTER);
frame.add(viewportPanelEast, BorderLayout.EAST);
frame.add(viewportPanelBottom, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
private Main() {
}
}
答案 3 :(得分:0)
一个想法是将每个自定义绘画放在一个单独的JPanel中, 然后加上这个。
public class MyFrame extends JFrame {
//initialize frame...
//put your components
//now put your jpanel
MyPanel custom = new MyPanel();
custom.setBounds(10, 10, 100, 100);
this.add(custom);
}
public class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//draw your stuff...
}
}
当然,这会让它变得不那么活跃......
编辑:
谈论分离,如果你想将你的屏幕分开,例如两部分: 一个用于自定义绘画,一个用于组件,例如用于游戏, 那么这个解决方案应该符合你的需求......