概述
使用setlayout(null)后,就是不用java提供的一些布局,用像素坐标的形式来布局面板 ,可以用setbounds的形式 来确定哪个组件在什么位置,它不随面板大小的改变而改变。注意:setbounds只有在设置了setlayout(null)后才能启作用。
官方解读地址:Doing Without a Layout Manager(Absolute Positioning)绝对定位
http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html
1、主要内容
通过Swing编写图形用户界面
2、Swing控件编程
用Swing编写图形用户界面主要涉及JFrame, JPanel, JButton等等类。其中,JFrame是界面布局的桌子;JPanel是放置控件的幕布,铺在JFrame上将空间分成若干块;JButton等控件添加到JPanel的指定位置中。
2.1JFrame相关方法
setTitle("")设置窗口名称
setBounds()设置窗口位置和尺寸
setLayout(null)关闭窗口布局管理器使得后面的setBounds生效
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)定义窗口关闭事件
setResizable(false)禁用最大化
getContentPane()返回窗体的contentPane对象
getContentPane().add(JPanel)添加JPanel容器
2.2 JPanel相关方法
setBounds()设置窗口位置和尺寸,在JFrame内的相对位置
setLayout(null)关闭窗口布局管理器使得控件的setBounds生效
add()添加控件
2.3 JButton等控件
setBounds()设置窗口位置和尺寸,在JPanel内的相对位置
代码如下:
- public class mainFrame extends JFrame{
- public TextArea revArea;
- public JButton button1;
- public JButton button2;
- public JButton button3;
- public JButton button4;
- public JButton button5;
- public JButton button6;
- public mainFrame() {
- this.setTitle("服务器");
- this.setBounds(300, 200, 500, 500);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setLayout(null);
- this.setResizable(false);
- JPanel panel_1 = new JPanel();
- panel_1.setLocation(350, 20);
- panel_1.setSize(100, 300);
- panel_1.setLayout(null);
- button1 = new JButton("Exp 1");
- button1.setBounds(0, 0, 100, 30);
- button2 = new JButton("Exp 2");
- button2.setBounds(0, 50, 100, 30);
- button3 = new JButton("Exp 3");
- button3.setBounds(0, 100, 100, 30);
- button4 = new JButton("Exp 4");
- button4.setBounds(0, 150, 100, 30);
- button5 = new JButton("保存");
- button5.setBounds(0, 200, 100, 30);
- button6 = new JButton("任务取消");
- button6.setBounds(0, 250, 100, 30);
- panel_1.add(button1);
- panel_1.add(button2);
- panel_1.add(button3);
- panel_1.add(button4);
- panel_1.add(button5);
- panel_1.add(button6);
- this.getContentPane().add(panel_1);
- revArea = new TextArea();
- revArea.setBounds(10, 10, 280, 440);
- this.getContentPane().add(revArea);
- Event();
- }
3、Swing的并发
当一个Swing控件触发一个长期运行任务时,那么这个长期运行任务就占用了事件分发线程(图形界面的线程),导致按钮无法立刻弹起来。解决方法是在响应触发时分配单独的线程执行长期运行的任务。可以使用单线程的Executor线程池,它自动将待处理任务排队,然后按顺序执行。
- button2.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- revArea.append("实验二n");
- executor.execute(new Runnable() {
- public void run() {
- c.Experment_2(file);
- }
- });
- }
- });
其中,c.Experment_2()是一个长期运行任务。
- public ExecutorService executor = Executors.newSingleThreadExecutor();
4、遗留的问题
在实际问题中遇到了如何异步终止线程的问题。
一般的方法是通过外部方法改变control变量的值来终止线程
- while (control) {
- }
但是在有阻塞IO或等待锁时,无法用这种方法来终止。
本文转自:http://blog.csdn.net/zjgtan/article/details/10252759
JLabel设置背景色
由于 Jlabel 默认是透明的,所以直接通过setBackground(color)设置背景色是看不到效果的,如果想看到效果,需要首先设置该JLabel不透明,就可以了。
- JLabel tips = new JLabel("正在执行,请稍后...");
- tips.setOpaque(true);//设置组件JLabel不透明,只有设置为不透明,设置背景色才有效
- tips.setBackground(ColorUtil.LU_DOU_SHA);
注:opaque [o'pek] 中文意思:不透明的
最后
以上就是活泼铅笔为你收集整理的setLayout(null)的意思和JLabel设置背景色的全部内容,希望文章能够帮你解决setLayout(null)的意思和JLabel设置背景色所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复