做java swing 为什么 在JFrame添加的组件都不显示

做java swing 为什么 在JFrame添加的组件都不显示,第1张

JFrame默认布局是BorderLayout,如果没有特殊指定其他布局的话,JButton和JTextField的setSize方法是没有用的。如果你想自定义组件的大小和位置,你可以试试setLayout(null)然后用添加组件的setBounds(int x,int y,int width,int height)方法来添加你的组件试试

import java.awt.*

import javax.swing.*

import java.awt.event.*

public class Painter extends JFrame

{

private int xValue=0,yValue=0

public Painter()

{

super("A Simple paint program")

getContentPane().add(new JLabel("Drag the Mouse To Paint"),"South")

/*addMouseMotionListener(

new MouseMotionAdapter(){

public void mouseDragged(MouseEvent e)

{

xValue=e.getX()

yValue=e.getY()

repaint()

}

}

)*/

setSize(300,300)

setVisible(true)

}

/*

public void paint(Graphics g)

{

g.fillOval(xValue,yValue,4,4)

}*/

public static void main(String[] args)

{

Painter frame=new Painter()

}

}

这主要是paint(Griphics g)方法的问题

注意java.awt包和javax.swing包中的类的层次问题

java.lang.Object ->java.awt.Component ->java.awt.Label

java.lang.Object

-> java.awt.Component

-> java.awt.Container

-> javax.swing.JComponent

-> javax.swing.JLabel

而在java.awt.Component和javax.swing.JComponent都分别根据组件的清重量级定义了不同实现方式的paint方法

在你的程序中,你是在JFrame中直接进行绘画,而JFrame属于重量级组件,Label属于偏重量级JLabel属于偏轻(轻重的区别就是是否跟本地系统有太大关系)。。JFrame JWindow JDialog 等等。。并且你绘画的区域和你添加Label

的位置有重叠。。。诸多原因导致了无法显示

建议:将绘画的组件 改成JPanel。。可以多分级绘画,也可以并列多个JPanel,然后分别添加 组件 和绘画,不会重叠。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11779402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存