最后在做一个俄罗斯方块的小游戏,看着视频做挺简单的,都是手把手的,一行代码一行代码的教.. 自己亲自动手做,才发现难,真难.在界面布局这块就出问题,走不动了. 游戏主要分三块显示区, 主游戏区,下一个游戏图形区,游戏状态区(速度,得分)
每一个显示区放在一个JPanel中,用了N种布局方式,显示出来总有问题.
1. BorderLayout的时候,中间区域总是最大,右边显示不出界面(右边大小总是很小,用jpanel.setSize()改变JPANEL大小不管用), 这种布局方式本来就是左右宽度不变,上下高度不变,在窗口改变大小的时候.
2. FlowLayout的时候,两个jpanel显示出来了,但是只有一丁点小.如上设置大小不管用.
3. gridLayout的时候,两个jpanel总是一样的大,但是这太不符合游戏风格了吧,左边的主游戏区要大一些才合理.
最后不得己,采用绝对定位的方式来布局,勉强算过去了,但是心一直不安,Swing不会这么菜,布局这么栏,这点功能都实现不了?
在网上搜索了很久,用Eclipse不断的尝试小程序,.终于还是让我发现了问题的根源.[size=medium]在设置JPanel大小的时候,要用JPanel.setPreferredSize()这个方法才行.哈哈,问题总算是解决了,回去后再改代码吧.用这个方法改JPanel大小之后,立马显示出来效果,大borderLayout中上下左右就可以控制宽度了.哈哈
以下是个小小的测试代码
[/size]
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToolBar;
public class MainFrame extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MainFrame mai=new MainFrame();
mai.setLayout(new BorderLayout());
JToolBar jtoolbar=new JToolBar();
JLabel jl=new JLabel("state");
jtoolbar.add(jl);
JPanel jpanel1=new JPanel();
JButton jb1=new JButton("North");
jpanel1.setPreferredSize(new Dimension(300, 150));//关键代码,设置JPanel的大小
jpanel1.add(jb1);
jpanel1.setBorder(BorderFactory.createEtchedBorder());
JButton jb2=new JButton("Center");
mai.add(jpanel1,BorderLayout.EAST);
mai.add(jb2,BorderLayout.CENTER);
mai.add(jtoolbar,BorderLayout.SOUTH);
mai.setSize(300, 400);
mai.setVisible(true);
mai.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
分享到:
相关推荐
例如,如果希望背景图片填充整个窗口,可以使用BorderLayout并设置组件大小: ```java panel.setLayout(new BorderLayout()); panel.setSize(frame.getSize()); ``` 5. 更新和显示:最后,更新组件并显示出来: ```...
在Java Swing库中,`JPanel`是一个非常基础且重要的组件,它被广泛用于构建用户界面。本示例中,我们讨论的是一个自定义的`JPanel`子类,名为`AutojustChildPanel`,该子类实现了自适应布局的能力。这种能力使得组件...
最后,设置窗口大小并使其可见。 在Java Swing中,`BorderLayout` 是 `JFrame` 默认的布局管理器,它有五个区域:北(North)、南(South)、东(East)、西(West)和中心(Center)。在示例程序中,`JPanel` 被...
Java的标准库并未提供直接在`JPanel`上设置背景图片的方法,但是通过自定义`JPanel`并重绘组件,我们可以实现这个功能。描述中提到的解决方案可能是通过网上搜索到的一种实现方式,旨在帮助那些尚未找到相应方法的...
需要注意的是,使用 setContentPane() 方法时,不允许设置窗体布局,其只显示最后添加的组件,且该组件将布满整个窗口,而不管原先组件的大小设置。 2. JPanel 的使用 JPanel 是 Java 图形化界面中最常使用的容器...
开发者可以通过设置JFrame的大小、位置、边框、背景色等属性来定制窗口外观,并通过add()方法添加其他组件到JFrame上。 JPanel是Swing中另一个重要的组件,它是一个空白容器,可以用来放置其他的组件或者绘制自定义...
JPanel可以使用不同的布局管理器,以便根据需求灵活地调整组件的位置和大小。本实例将探讨如何在Swing应用中实现多个JPanel布局的切换。 首先,我们需要了解Swing中的布局管理器。Swing提供了多种布局管理器,如...
Java Swing提供了多种内置的布局管理器,如FlowLayout、BorderLayout、GridLayout等,它们负责决定组件在容器中的位置和大小。选择合适的布局管理器对正确地添加和移除组件至关重要。 **6. 容器层次结构** 在复杂的...
本篇将通过两个小例子详细介绍如何在`JPanel`中设置背景图片。 ### 示例1:动态加载背景图片 在第一个例子中,我们创建了一个名为 `ImagePanel` 的类,它继承自 `JPanel`。这个类的目的是能够动态加载图片作为背景...
最后,网格布局(GridLayout)将容器划分为固定数量的行和列,每个单元格可以放置一个组件,所有组件的大小都会被调整为一致。虽然在这个例子中没有直接使用GridLayout,但我们可以假设创建一个GridLayout布局的容器...
在本例中,`JPanel` 的大小被设置为 `400x300`,而 `JScrollPane` 的大小被设置为 `300x200`。这意味着 `JPanel` 的内容超出了 `JScrollPane` 的大小,但 `JScrollPane` 的大小并未根据 `JPanel` 的内容进行调整。 ...
`JPanel` 是 Swing 中一个非常基础且重要的组件,属于容器类,可以用来组织其他组件,如按钮、文本框等。在 Swing 应用程序中,`JPanel` 经常被用作内容面板或者自定义组件的容器。 1. **JPanel 的概述** `JPanel`...
在默认情况下,JPanel有一个简单的背景色,但通常我们需要更个性化的设计,比如设置自定义的图片背景。为了实现这个目标,我们需要重写JPanel的`paintComponent()`方法。在重写过程中,我们可以利用Graphics对象来...
JFrame提供了设置窗口标题、大小、位置以及关闭操作的特性。 其次,JPanel是JComponent的一个子类,它是一个可定制的容器,通常用于组合和管理多个组件。JPanel允许开发者通过自定义布局管理器来控制其内部组件的...
- **动态调整**:除了初始加载时设置图片大小外,还可以监听组件大小的变化事件,从而实现实时调整图片大小的功能。 - **多组件适配**:除了`JButton`,这种方法也可以应用于其他Swing组件,如`JLabel`、`JPanel`...
在扫雷中,可能需要自定义布局,以便每个格子占据相同大小的空间。 8. **资源管理**: 游戏可能包含图标或声音资源,如揭示数字的音效、标记雷的图标等。这些资源可以通过`ImageIcon`类加载,并在`JPanel`上显示。 ...
`main`函数创建了一个包含该面板的`JFrame`,并设置为应用程序的主窗口。`addComponentListener`用于添加组件监听器,以便在窗口大小改变时更新图片的显示。 在实际应用中,你可能还需要添加额外的功能,如图片的...
本篇将深入探讨如何使用Java2D对文本进行绘制,并详细讲解可以设置的各种属性,如字体、大小、颜色、透明度、字符间距和行间距。 1. **字体选择**:在Java2D中,你可以使用`Font`类来创建和操作字体。通过指定字体...
1. **利用`JPanel`设置背景** `JPanel`是Java Swing中的一个基础组件,它被用来添加自定义的组件或绘制图形。在`JPanel`上设置背景图像,我们可以重写`paintComponent()`方法。首先,我们需要加载图片,然后在`...
例如,在这个示例程序中,我们将背景图片添加到一个 `JPanel` 中,并设置其大小和位置以便填充整个窗口。 知识点5: 使内容窗格透明 在 Java 中,使内容窗格透明需要使用 `setOpaque(false)` 方法。例如,在这个...