我正在制作一个gui,其中使用paint组件方法绘制一条线,我知道我可以使用扩展JPanel来做到这一点。但我真的想知道如何做到这一点而不扩展任何东西。喜欢这个程序
public class Main {
static JPanel panel;
public static void main(String[] args) {
JFrame frame = new JFrame("Our Frame");
panel = new JPanel();
frame.setSize(600,480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.add(panel);
}
}
在这条路上
public class Main {
public static void main(String[] args) {
Frame obj = new Frame();
}
}
public class Frame extends JFrame{
private JPanel panel;
public Frame(){
panel = new JPanel();
setSize(600,480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
add(panel);
}
}
答案 0 :(得分:0)
您可以这样做:
JPanel panel = new JPanel(true) {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// do painting
}
}
答案 1 :(得分:-1)
嗯,技术上你可以使用component.getGraphics();
获取给定组件的图形上下文,然后绘制它。 但,因为该组件也会自行重绘,一旦重绘发生,您的绘图将消失。所以,不要考虑这样做,你只会浪费你的时间!
但是,如果您有一个在BufferedImage
中呈现paintComponent()
的组件,则可以在图像上绘制(使用img.getGraphics();
等),然后组件将反映这些图形。这将允许您拥有一个简单的MyPanel
类,其中paintComponent()
只会绘制图像。然后,您可以获得对图像的引用,并从您想要的图像中进行绘制。
您已经在代码中扩展了某些内容,在您的情况下,它完全没有必要。您可以删除Frame
课程,并使用以下代码显示JFrame
。
JFrame f = new JFrame();
f.setSize(600, 480);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.add(panel);
f.setVisible(true);