在JFrame中显示JPanel网格? 我对java很陌生,但有C++的一些经验。这是一个家庭作业,所以我真的只是想找个人给我指出正确的方向
分配需要一个在JFrame中显示JPanel网格? 我对java很陌生,但有C++的一些经验。这是一个家庭作业,所以我真的只是想找个人给我指出正确的方向,java,swing,layout-manager,Java,Swing,Layout Manager,分配需要一个JFrame,其中JPanel对象以13x4网格显示牌组中的每张牌。教授为我们提供了一些代码,让我们开始学习: import javax.swing.*; import java.awt.*; public class Main public static void main(String[] args) { //load the card image from the gif file. final ImageIcon cardIcon = new ImageI
JFrame
,其中JPanel
对象以13x4网格显示牌组中的每张牌。教授为我们提供了一些代码,让我们开始学习:
import javax.swing.*;
import java.awt.*;
public class Main
public static void main(String[] args)
{
//load the card image from the gif file.
final ImageIcon cardIcon = new ImageIcon("cardImages/tenClubs.gif");
//create a panel displaying the card image
JPanel panel = new JPanel()
{
//paintComponent is called automatically by the JRE whenever
//the panel needs to be drawn or redrawn
public void paintComponent(Graphics g) {
super.paintComponent(g);
cardIcon.paintIcon(this, g, 20, 20);
}
};
//create & make visible a JFrame to contain the panel
JFrame window = new JFrame("Title goes here");
window.add(panel);
window.setPreferredSize(new Dimension(200,200));
window.pack();
window.setVisible(true);
}
}
我已经尝试了一些东西,但我似乎无法显示多个面板。我应该使用gridLayout()
功能吗?还是只创建多个面板并指定每个面板在框架中的位置
如果有人能给我指出正确的方向,那就太棒了 有一种方法可以在一个JFrame中显示多个JPanel。不幸的是,你的路并不那么容易。Java有许多不同的布局管理器。 出于您的目的,我推荐GridBagLayout,它更复杂,但绝对是您需要的东西。 下面是一个很好的教程,它帮助我理解了它:
希望对您有所帮助。对于在容器中均匀分布的相同大小的元素的显示,是的,
GridLayout
将是一个不错的选择
如果需要在网格中以首选大小显示组件(每个组件的大小可能不同),则GridBagLayout
将是更好的选择
如果代码是由您的教授提供的,那么您需要返回并让他们修复它
首先,一个JLabel
将更容易,并为您试图实现的目标提供更好的支持
其次,由于
JPanel
不会覆盖getPreferredSize
,因此大多数布局管理器会将组件的大小设置为0x0“我应该使用gridLayout()功能吗?”如果您指的是gridLayout
,则是。就我个人而言,我会在JLabel
中显示图像(可能会添加到面板中)。感谢Andrew的更正,这是我的第一个Java程序,所以我目前非常无知。我会看看你的建议!谢谢你的回复!我一定去看看。我想指出的是,教授并没有明确表示我们必须使用多个JPanel,他只是为我们提供了上述代码和每张卡的.gif,因此如果有更简单的方法,请让我知道,但我将开始学习GridBagLayout教程。“出于您的目的,我建议使用GridBagLayout…”在这种情况下,为什么使用GBL而不是GridLayout
?如果所有单元格都需要相同的大小,因此GridLayout
。因为JPanel(据推测是由教授提供的)不会覆盖getPreferredSize,GridBagLayout将是一个错误的选择,因为它想用它来决定如何布局其组件,默认设置所有面板的0x0…好的,你是对的,我只是想再进一步。为什么只是在没有任何信息的情况下展示卡片。。。所以Gridlayout也可以工作