Java Swing 设置Jpanel的大小位置以及动态在Panel内添加文字.

Java Swing 设置Jpanel的大小位置以及动态在Panel内添加文字.,第1张

JFrame

的默认布局管理器是BorderLayout,BorderLayout将容器(也就是JFrame)分成东

西

五个部分,向JFrame添加控件时BorderLayout默认将控件的位置设置为中间位置,所以你的设置不起作用

看了你的问题是想通过坐标控制控件,所以要将JFrame的布局管理器设置为绝度布局,即

mainFrame.setLayout(null)将布局管理器设置为null.

向其中动态添加文字有两种实现方式

1、是重写JPanel的paintComponent(Graphics

g)方法2、是动态添加JLabel

public class Sum {

public static void main(String[] str) {

final JFrame frame = new JFrame()

frame.setSize(400, 500)

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

frame.setResizable(false)

JPanel panel = new JPanel()

JPanel panel1=new JPanel()

final JTextField input1 = new JTextField(10)

final JTextField input2 = new JTextField(10)

final JTextField input3 = new JTextField(10)

final JTextField input4 = new JTextField(10)

final JTextArea jtx=new JTextArea(300,400)

jtx.setVisible(true)

JLabel label = new JLabel("姓名")

JLabel label1 = new JLabel("性别")

JLabel label2 = new JLabel("年龄")

JLabel label3 = new JLabel("学号")

JButton button = new JButton("显示")

BorderLayout layout=new BorderLayout(5,5)

GridLayout gl=new GridLayout(5,2,5,5)

panel.setLayout(gl)

panel1.setLayout(layout)

panel.add(label)

panel.add(input1)

panel.add(label1)

panel.add(input2)

panel.add(label2)

panel.add(input3)

panel.add(label3)

panel.add(input4)

panel.add(button)

panel1.add(panel,"North")

panel1.add(jtx,"Center")

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

String str1 = input1.getText().trim()

String str2 = input2.getText().trim()

String str3 = input3.getText().trim()

String str4 = input4.getText().trim()

jtx.setText("姓名"+str1+"\n"+"性别"+str2+"\n"+"年龄"+str3+"\n"+"学号"+str4)

}

})

frame.add(panel1, BorderLayout.NORTH)

frame.setVisible(true)

}

}

Java在JFrame面板上显示背景文字的方法:

主函数:

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

HAPPY frame = new HAPPY()

//frame.setVisible(true) 这行代码,可加可不加,并不会影响最终结果,但是在构造函数中一定要添加;

} catch (Exception e) {

e.printStackTrace()

}

}

})

}

构造函数(关键代码):

JFrame frame=new JFrame("\设\置\背\景\图\片 ")

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

ImageIcon img = new ImageIcon("src/images/1.jpg")//这是背景图片

JLabel imgLabel = new JLabel(img)//将背景图放在标签里。

frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE))//注意这里是关键,将背景标签添加到jfram的 LayeredPane面板里。

imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight())//设置背景标签的位置

Container cp=frame.getContentPane()

cp.setLayout(null) //这里选择绝对布局管理器,对于边界布局管理器,放入控件后,无法显示背景图片;因为将整个面板都填充满了;

((JPanel)cp).setOpaque(false)//这样就能显示出背景图片出来了。

剩下的就是在面板中添加相关的控件,添加语句可以用:

(1)frame.getContentPane().add(panel);(2)cp.add(panel)

效果一样;

另一种方法则是直接为面板设置背景图片,源代码如下:

contentPane = new JPanel(){

private static final long serialVersionUID=-1588458291133087637L

public void paint(Graphics g){

ImageIcon icon=new ImageIcon("src/images/5.jpg")

Image image=icon.getImage()

g.drawImage(image, 0, 0, null)

}

}

但在实验中发现,显示效果不如前一种方法,不知为何,面板上设置的标签文字显示不出来,所以,后一种方法虽然更简便,但似乎前一种方法效果更好!

第三种方法:

contentPane.setOpaque(false)

JLabel backgroundLabel = new JLabel("")

ImageIcon background = new ImageIcon(BalloonMove.class.getResource("/images/background.jpg"))

backgroundLabel.setBounds(0, 0, background.getIconWidth(),background.getIconHeight())

backgroundLabel.setIcon(background)

getLayeredPane().add(backgroundLabel, new Integer(Integer.MIN_VALUE))

窗口中的标签,可以直接添加到contentPane面板中,很显然,最后一种方法显示效果很好,且代码简便。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存