我有一个MyFrame
类扩展JFrame
。我使用NET BEANS中的设计选项向此框架添加了组件(控件,即按钮)。我有一个MyCanvas
类,使用重写的JPanel
方法扩展paintComponent()
。我正在尝试将此组件添加到MyFrame
类。但是当我添加它并使其可见时,画布(JPanel
)不会显示在JFrame
上。
(首先我尝试添加由Mycanvas
扩展的Canvas
类。但是我在这里读了一个帖子尝试将其更改为JPanel
。我也没有工作。还有画布我显然不使用油漆paintcomponent()
)
我的代码在下面
MyCanvas类
public class MyCanvas extends javax.swing.JPanel{
MyCanvas()
{
super();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D graphics2D=(Graphics2D)g;
graphics2D.drawRect(10, 10, 10, 10);
graphics2D.drawOval(0, 0, 100, 100);
}
}
MyFrame
public class Myframe extends javax.swing.JFrame {
public Myframe() {
initComponents();
@SuppressWarnings("unchecked")
+generatedcode by the designer
private void RectangleActionPerformed(java.awt.event.ActionEvent evt) {
}
private void SquareActionPerformed(java.awt.event.ActionEvent evt) {
}
private void CircleActionPerformed(java.awt.event.ActionEvent evt) {
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Myframe().setVisible(true);
}
});
}
public void run() {
new Myframe().setVisible(true);
}
// Variables declaration - do not modify
private javax.swing.JButton Circle;
private javax.swing.JButton Rectangle;
private javax.swing.JButton Square;
// End of variables declaration
}
我的主要计划
public static void main(String[] args) {
MyCanvas c = new MyCanvas();
Myframe f= new Myframe();//Works if used JFrame instead of MyFrame
f.add(c);
f.setVisible(true);
}
基本上我想创建一个GUI,其中我想要按钮,它可以触发事件并更改画布上绘制的内容。我尝试了一个空的jframe。将画布/面板添加到JFrame。有效。我还改变了我的Panel / Canvas并重新刷新了框架。这也很好。但我不能这样做。
答案 0 :(得分:2)
您正在混合创建JFrame
与IDE并自己创建JPanel
,请记住IDE将所有组件添加到JFrame
中的initComponents()
,这是您理想的位置d想要添加Canvas
。
自己创建JFrame
和JPanel
(不使用Netbeans GUI Builder)
或
您可以使用Netbeans的 Palette Manager 将Component
添加到调色板,然后您可以像在任何其他类中一样在GUI构建器中使用它:
(只需将Canvas
类从项目树拖到GUI设计器中的JFrame
上
确保您的自定义Canvas
功能:
getPrefferedSize(..)
并返回适合<强>参考:强>
答案 1 :(得分:0)
尝试将其更改为:
public static void main(String[] args) {
MyCanvas c = new MyCanvas();
Myframe f= new Myframe();//Works if used JFrame instead of MyFrame
f.add(c);
c.setVisible(true);
f.setVisible(true);
}
此外,MyFrame
课程中的代码:
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Myframe().setVisible(true);
}
});
}
除非您正在运行MyFrame
而不是程序主页,否则不会执行。
同时检查super()
构造函数中是否有MyFrame
来电。
答案 2 :(得分:0)
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
Graphics2D graphics2D=(Graphics2D)g;
graphics2D.drawRect(10, 10, 10, 10);
graphics2D.drawOval(0, 0, 100, 100);
}