【发布时间】:2011-09-10 10:32:46
【问题描述】:
很长一段时间后,我开始学习 Java。并学习 Netbeans 7.0。
我只是想确保我这样做没问题。
我基本上需要制作一个小程序,但不是基于 AWT,而是基于 Swing。
所以我需要扩展 JApplet,而不是 Applet。我理解在 Jpanel 而不是 awt 画布(或面板)上的摇摆绘制。所以我在一个网站上读到需要重写 PaintComponent() 而不是像 awt 小程序那样重写paint()?
我需要做一个非常简单的小程序,比如说有一个按钮,当我点击它时,我想画一个图形,比如说一条线或圆,然后输出到按钮下方的区域。
这就是我所做的
- 文件->新建项目
- 选择 Java 并从项目中选择“Java 应用程序”
- 确保取消选中“创建主类”,然后单击完成
- 文件->新建文件
- 从类别面板下选择“Swing GUI 表单”
- 从“文件类型”中,选择 Japplet 表单,下一步并完成
- 从调色板中,从 Swing Controls 中选择 Button 并将其放在 from 上
- 现在是棘手的部分。我需要一个可以绘制的区域,对吧?所以我从调色板中,从 Swing 容器中选择一个“面板”,并将其放置在表单上,根据需要调整它的大小。做,现在我有了这个:
到目前为止,我在正确的轨道上吗?现在我打开源文件,我看到了 init() 方法。
现在是我需要一点帮助的地方。不确定我需要插入什么代码才能在我刚刚添加的 JPanel 上画一条线。我知道我需要在此处插入:
我尝试了“插入代码”功能,并选择覆盖,但没有看到 PaintComponent()?
我知道如何在 swt 小程序中做到这一点,只需添加一个 paint(Graphics g) 方法。但是当我这样做时,图形不会在 Jpanel 区域内绘制。基本上,我如何告诉它在特定的 JPanel 区域中绘制一些东西?
如果有人告诉我我需要在那里插入什么代码来绘制一条线或任何 graphics2D 对象以显示在我添加到底部下方的那个 JPanel 上,那就太好了。
谢谢, --纳赛尔
编辑 1:
澄清一下:如果我在 Jpanel 上添加此功能:
公共 void 油漆(图形 g)
{
super.paint(g);
g.drawString(....);
}
然后输出确实显示正常,但它在主 Japnel 上。并且可以隐藏按钮和其他任何 UI 组件。
我需要将绘制输出转到我之前在按钮下方添加的特定 Jpanel。给这个
private javax.swing.JPanel jPanel1;
所以,我的问题是,如何绘制/绘制到上述对象而不是主 Jpanel?
编辑 2:
我只是尝试更改 JPanel 背景颜色,但它不起作用。这是代码。 我还尝试了 JpanelForm 而不是 JApplet Form。可以使用 JFrame 形式制作小程序吗?由于这需要 main() 似乎不可能。
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
public class NewJApplet extends javax.swing.JApplet
{
/** Initializes the applet NewJApplet */
public void init()
{
jPanel1 = new JPanel();
try
{
java.awt.EventQueue.invokeAndWait(new Runnable()
{
public void run()
{
initComponents();
}
});
} catch (Exception ex)
{
ex.printStackTrace();
}
}
private void initComponents() {...}
//--------- ADDED THIS
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
Rectangle rect=new Rectangle(4,4);
jPanel1.setBackground(Color.RED);
}
//---------------
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
【问题讨论】: