我有三个类,MessageFrame,MessagePanel和带有main方法的Message。我不确定如何将JPanel添加到JFrame类中。
MessageFrame:
public class MessageFrame extends JFrame{
public MessageFrame(){
setTitle("Message in a Bottle");
setSize(960, 960);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
MessagePanel pane = new MessagePanel();
// <- this is where stackoverflow recommends add(MessagePanel) but it gives me an error
}
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Font font = new Font("Serif", Font.PLAIN, 30);
g2.setFont(font);
g2.drawString("Text", 160, 180);
}
}
MessagePanel:
public class MessagePanel {
public MessagePanel(){
JPanel p = new JPanel();
}
}
消息:
public class Message {
public static void main(String[] args) {
MessageFrame x = new MessageFrame();
x.paint(null);
}
}
答案 0 :(得分:1)
建议添加(MessagePanel)但它给我一个错误
MessagePanel不是Component
,只能将组件添加到框架中。
如果要将MessagePanel添加到框架,则MessagePanel需要extend JPanel
。
然后不需要在构造函数中创建JPanel,因为该类已经是JPanel。
x.paint(null);
当然,一旦你得到一个干净的编译,你将得到一个NullPointerException,因为你将null传递给paint()方法。摆脱该语句,甚至不覆盖框架的paint()方法。这不是你自定义绘画的方式。
我建议您阅读Swing教程的基础知识,因为您的代码显示缺乏对Swing基础知识的理解。
也许从Top Level Container开始。本教程中有大量示例,您应该下载这些示例以了解如何更好地构建代码。
答案 1 :(得分:0)
this is where stackoverflow recommends add(MessagePanel) but it gives me an error
请改为add(pane)