的默认布局管理器是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面板中,很显然,最后一种方法显示效果很好,且代码简便。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)