`

javax.swing.JFrame中使用jpanel来布局

    博客分类:
  • JAVA
 
阅读更多

通俗的讲jframe相当与桌子,而jpanel相当桌布,jbutton,jlabel等相当于杯子,碗筷等,杯子,碗筷虽然可以直接放到桌子上但不是很规范,应该放到桌布上才对。
以前我没有用jpanel来布局。直接就是jframe.add(jlabel1);然后就是jlabel1.setbound();这种做法不妥,虽然窗口可以正常显示,但是还是不规范,有事后会有点小问题,当组件更改的时候会有点问题,会有阴影(以前遇到过这种问题)。

正确的做法是
1.使用Container content=this.getContentPane();得到容器
2.实例化一个jpanel 例如JPanel  panel1=new   javax.swing.JPanel();
3.实例化组件比如JButton等
4.使用panel1.add()方法添加组件
5.定位比如说JButton1.setbound(0,0,23,34);注意这里的坐标是相对于其所在的容器panel1
6.使用例如content.add(panel,BorderLayout.CENTER);方法把“桌布”(panel1)放到“桌子”content上。(JFrame的默认布局是BorderLayout)

示例代码如下:

1: import java.awt.BorderLayout;
2: import java.awt.Color;
3: import java.awt.Container;
4: import javax.swing.JButton;
5: import javax.swing.JFrame;
6: import javax.swing.JPanel;
7: public class NewClass extends JFrame {
8:  /** Creates a new instance of NewClass */
9:  public NewClass() {
10:   init();
11:  }
12:  public void init() {
13:   // 实例化JPanel等一些组件
14:   JPanel pan1 = new JPanel();
15:   JButton jb1 = new JButton("one in pan1");
16:   JButton jb2 = new JButton("two in pan1");
17:   JButton jb3 = new JButton("one out panel");
18:   JButton jb4 = new JButton("two out panel");
19:   // setBound()坐标是相对于pan1而言的
20:   jb1.setBounds(0, 0, 100, 30);
21:   jb2.setBounds(0, 200, 100, 30);
22:   // 得到容器为什么不需要实例化?可能是因为每个窗口都有这个对象
23:   Container cont = getContentPane();
24:   // 将pan1添加到容器中
25:   cont.add(pan1, BorderLayout.CENTER);
26:   cont.add(jb4, BorderLayout.WEST);
27:   cont.add(jb3, BorderLayout.EAST);
28:   // 将组件添加到pan1中,并对pan1做一些初始化
29:   pan1.setLocation(70, 70);
30:   pan1.setLayout(null);//注意此处的null
31:   pan1.add(jb1);
32:   pan1.add(jb2);
33:   pan1.setBackground(Color.ORANGE);
34:   this.setBounds(0, 0, 400, 400);
35:   this.setVisible(true);
36:  }
37:  public static void main(String arg[]) {
38:   NewClass test = new NewClass();
39:  }
40: }
问题1:做窗口程序时候Container cont=getContentPane(); cont.add(pan1,BorderLayout.CENTER);//如何定位pan1位置?如何把pan1放到指定的坐标?
  答:可以使用pan1.setbound()方法,相应的要设置cont.setLayout(null);    注意JPanel的默认布局是FlowLayout
  如果没有设置cont.setLayout(null);系统会使用默认的布局管理器,那么pan1.setbound()就不会起作用,比如说上例cont没有设置布局管理器为空。
  容器包含关系JFrame=》  Container=》JPanel=》(各种组件)

分享到:
评论

相关推荐

    javax.swing编的用户界面

    在本项目中,"简单的用户登录界面设计"就是使用`javax.swing` 包来实现的。 首先,我们来了解一下`javax.swing` 中的核心组件: 1. JFrame:这是所有Swing应用的基础,它代表了一个独立的窗口,包含其他组件。 2. ...

    图书管理系统源文件

    代码: ...import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToolBar; 文档下载地址:http://download.csdn.net/detail/xing634325131/5119686

    龟兔赛跑源代码程序课程设计

    public class Frame extends javax.swing.JFrame { public Frame() { initComponents(); } private void initComponents() { SearchPanel = new javax.swing.JPanel(); SearchTextField = new javax.swing....

    一个简单的一对一 聊天系统

    import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JScrollPane; public class TalkClient extends JFrame implements ...

    java 俄罗斯方块

    import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event....

    精通java-swing开发.doc

    例如,`JFrame`、`JDialog`等窗口组件通常会包含一个或多个容器(如`JPanel`),这些容器使用不同的布局策略,如FlowLayout、GridLayout、BorderLayout或 MigLayout等,以达到理想的设计效果。 总的来说,Java ...

    java课程设计斗地鼠游戏源码

    import javax.swing.JPanel; import javax.swing.Timer; public class MousePaly implements ActionListener { private JFrame frame; private Container contentPane; private JLabel timeLabel,centLabel; ...

    swing 学习 有时间学学

    5. `javax.swing.JFrame` - Swing版本的Frame,提供更丰富的功能。 6. `javax.swing.JDialog` - 用于创建对话框的Swing组件。 7. `javax.swing.JApplet` - 用于创建Web上的Swing应用程序。 8. `javax.swing....

    Swing界面开发和游戏开发.docx

    Swing提供了多种布局管理器来帮助开发者组织界面元素,这些布局管理器可以使界面看起来更专业且一致。 - **FlowLayout**:按添加顺序水平或垂直排列组件。 - **GridLayout**:将容器划分为具有固定大小的单元格网格...

    Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    Java Swing 组件布局管理器中有多种布局管理器,今天我们主要介绍 FlowLayout(流式布局),它是最简单、最基础的一个布局管理器。 FlowLayout 也称为流式布局,它的特点是内部控件像水流一样,从前到后按顺序水平...

    轻松学Java之图形界面编程ppt课件.pptx

    容器类是Swing中提供用来创建表示图形用户界面的类,包括窗口(JFrame)、面板(JPanel)和对话框(JDialog)。这些类的对象将被当作容器使用,所有的Swing组件都必须被添加到容器中,才能被显示出来。 六、JFrame...

    java图形界面开发,简单的计算器

    import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class CalcultorA { public static void main(String[] args){ JFrame jf=new JFrame("我的计算器v1.0"); jf....

    java万年历代码示例

    import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; class MainFrame extends JFrame { /** *//** * */ private static final long serialVersionUID = 1L; JPanel panel =...

    Java中Swing.pdf

    在Swing中,开发者可以通过`add()`方法将控件添加到容器中,并可以使用一系列的方法来设置和获取控件的外观、位置和大小等属性。 Swing的事件处理主要沿用了AWT的事件处理模型。AWT事件类都是`java.awt.AWTEvent`的...

    JAVA学习笔记swing JFrame窗口学习.rar_it_java swing_jframe_jframe mwc

    在实际开发中,JFrame常常与其他Swing组件结合使用,如JPanel、JLabel、JButton等,以构建更复杂的用户界面。同时,Swing提供了许多预定义的外观风格(LookAndFeel),可以通过`UIManager`类来切换,以满足不同用户...

    Java目录树控件

    通过使用Swing库中的组件,我们可以轻松地构建出具有基本功能的文件浏览器。此控件不仅可以作为学习Java Swing的一个实例,还可以作为实际项目中文件管理功能的基础。对于希望深入了解Java GUI编程或文件系统操作的...

    Java swing 中JButton的使用

    - 动作命令:`"disable"` — 这将在事件处理中使用。 2. **bc (Center Button):** - 设置文本:“默认按钮” - 设置图标:`centerButtonIcon` - 文本垂直位置:底部 (`AbstractButton.BOTTOM`) - 文本水平位置...

    Spreading_of_Fire:森林火灾蔓延模拟

    **方法** * 数组 2D * javax.swing.JFrame * javax.swing.JPanel * javax.swing.JLabel * javax.swing.JOptionPane * javax.swing.JButtonGroup * javax.swing.JButton * javax.swing.JRadioButton * javax.swing....

    JAVA组件小全一览表

    * JFrame:javax.swing.JFrame 是一个基本的顶层容器,用于创建窗口。其构造方法包括 JFrame() 和 JFrame(String s)。 * JApplet:javax.swing.JApplet 是一个 Applet 组件,用于在浏览器中运行 Java 小程序。其构造...

Global site tag (gtag.js) - Google Analytics