用Java创建一个简单的自定义JComponent?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用Java创建一个简单的自定义JComponent?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2636字,纯文字阅读大概需要4分钟。
内容图文
我想开始为工作中的项目构建自己的自定义JComponent.我在下面有一个简单的例子,它应该只是在屏幕上创建一个球. (我在互联网上发现了大部分内容),但确实提供了一个不错的起点.我的问题是为什么这段代码不能以我的形式显示球?我做错了什么?
那么应该为自定义JComponent提供的所有基本方法是什么?
码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class testBall {
public static void main(String[] args) {
new testBall();
}
public testBall() {
JPanel testPane = new JPanel();
testPane.setBackground(Color.white);
testPane.setLayout(new GridBagLayout());
testPane.add(new MyBall(30,30,10));
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(testPane);
frame.pack();
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class MyBall extends JComponent
{
private static final long serialVersionUID = 1L;
public MyBall() { }
public MyBall(int x, int y, int diameter)
{
super();
this.setLocation(x, y);
this.setSize(diameter, diameter);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(0, 0, 100, 100);
}
}
在哪里可以找到应该在JComponent类中重写的所有方法的列表? (我知道有些应该总是包含在JComponent中.)
如果我在一个类中创建这个组件的实例并且需要更改圆的颜色,那么我只是从那个类中调用repaint()方法吗?
解决方法:
您正在将MyBall添加到testPane(具有GridBagLayout)而不指定任何约束. (也就是说,你对add()的调用没有第二个参数.)默认约束很可能不是你想要的.尝试将BorderLayout用于测试窗格,因为它使用BorderLayout.CENTER作为默认值,这在您的情况下可能是合理的:
testPane.setLayout(new BorderLayout());
这导致球出现在我面前.
至于你的第二个问题,我认为你的班级很好.您要实现的主要方法是paintComponent().有时候有必要覆盖get min / max / preferred size方法,但它实际上只取决于你希望组件做什么. JComponent不是抽象的,因此如果您不想,则不必覆盖任何内容.它提供了许多开箱即用的功能,如键盘焦点,可插拔外观,可访问性等.只要您不想更改任何内容,只需将其保留原样即可.实现paintComponent()和各种get * Size()方法并完成它. (您只需要选择JavaDoc中的方法来查看适合覆盖的内容.)
另一个选择是扩展JComponent的子类,如果有一个类与你想要做的类似.例如,JPanel通常是推动自己容器的良好起点.
你可能正在寻找比’依赖’更具体的东西,但是现在,如果您只想绘制一个球,那么只需覆盖处理JComponent渲染的方法(paintCompentent()和get *) Size()方法).
作为旁注,你真的应该使用SwingUtilities.invokeLater()在Swing线程上创建Swing组件.请参阅http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html中标题为“Swing的线程策略”的部分.
内容总结
以上是互联网集市为您收集整理的用Java创建一个简单的自定义JComponent?全部内容,希望文章能够帮你解决用Java创建一个简单的自定义JComponent?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。