java GUI中的CardLayout()

时间:2018-05-05 01:59:08

标签: java swing layout-manager cardlayout

在我的代码中,目前每张卡都是我的框架的大小。如何在布局中设置每个面板的不同尺寸。我尝试通过调用run()方法并更改框架的大小来使框架具有不同的大小,但它不起作用。我希望还有另一种方式。 这是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class GameManager
{
    JFrame frame;
    JPanel cards,Title;
    public GameManager()
    {
        cards = new JPanel(new CardLayout());
        Title title = new Title();
        cards.add(title,"title");
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "title");
    }
    public static void main(String [] args)
    {
        GameManager gm = new GameManager();
        gm.run();
    }
    public void run()
    {
        frame = new JFrame("Greek Olympics");
        frame.setSize(1000,1000);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(cards);
        frame.setVisible(true);
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "title");
    }
    public class Title extends JPanel
    {
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.fillRect(100,100,100,100);
        }
    }
}

如果我想添加另一个不同大小的面板,我将如何更改代码?

1 个答案:

答案 0 :(得分:4)

  

如何在布局

中设置每个面板的不同尺寸

首先,要了解CardLayout将使用其管理的所有视图的preferredSize属性来确定其管理的容器的最佳结果大小应该用。这意味着,如果您在框架上调用pack(而非setSize),则会将其(自动)调整为已管理的最大组件(CardLayout

  

如果我想添加另一个不同大小的面板,我将如何更改代码?

您添加到CardLayout的每个组件都应该通过一个或多个相应的布局管理器计算它的大小,或者在自定义组件的情况下,通过{{提供大小调整提示1}}方法

getPreferredSize

然后,使用public class Title extends JPanel { @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.fillRect(100,100,100,100); } }

,而不是使用setSize
pack

实施例...

这是设置两个面板的基本示例,其中一个面板public void run() { frame = new JFrame("Greek Olympics"); //frame.setSize(1000,1000); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(cards); frame.pack(); CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, "title"); frame.setVisible(true); } preferredSize,另一个面板为200x200

运行时,您会发现窗口至少为400x400,两个面板的大小相同

400x400