在我的代码中,目前每张卡都是我的框架的大小。如何在布局中设置每个面板的不同尺寸。我尝试通过调用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);
}
}
}
如果我想添加另一个不同大小的面板,我将如何更改代码?
答案 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