Java CardLayout中有2个以上可见的JPanel
在将两个以上的Java CardLayout中有2个以上可见的JPanel,java,swing,jpanel,layout-manager,cardlayout,Java,Swing,Jpanel,Layout Manager,Cardlayout,在将两个以上的JPanel对象放置在同时可见的CardLayout中时,我遇到了问题。虽然我可以放置多个面板,但它们不会同时出现,而且我无法根据需要调整它们的大小。为了更清楚地了解我想要什么,我添加了一个测试图像 在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(JPanel)。下面是一个简单的例子: import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color;
JPanel
对象放置在同时可见的CardLayout
中时,我遇到了问题。虽然我可以放置多个面板,但它们不会同时出现,而且我无法根据需要调整它们的大小。为了更清楚地了解我想要什么,我添加了一个测试图像
在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(
JPanel
)。下面是一个简单的例子:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestFrame extends JFrame {
public static void main(String... s) {
new TestFrame();
}
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
setLayout(new BorderLayout());
JLabel head = new JLabel("Header");
head.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel side = new JLabel("SideBar");
side.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JPanel changable = getPanel();
changable.setBorder(BorderFactory.createLineBorder(Color.BLACK));
add(head,BorderLayout.NORTH);
add(side,BorderLayout.WEST);
add(changable,BorderLayout.CENTER);
}
private JPanel getPanel() {
final CardLayout cards = new CardLayout(5,5);
final JPanel p = new JPanel(cards);
p.add(new JLabel("1"), "1");
p.add(new JLabel("2"), "2");
p.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
cards.next(p);
}
});
return p;
}
}
在这种情况下,您可以使用panel with作为常量和卡片的容器,然后使用cards(
JPanel
)。下面是一个简单的例子:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestFrame extends JFrame {
public static void main(String... s) {
new TestFrame();
}
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
setLayout(new BorderLayout());
JLabel head = new JLabel("Header");
head.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel side = new JLabel("SideBar");
side.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JPanel changable = getPanel();
changable.setBorder(BorderFactory.createLineBorder(Color.BLACK));
add(head,BorderLayout.NORTH);
add(side,BorderLayout.WEST);
add(changable,BorderLayout.CENTER);
}
private JPanel getPanel() {
final CardLayout cards = new CardLayout(5,5);
final JPanel p = new JPanel(cards);
p.add(new JLabel("1"), "1");
p.add(new JLabel("2"), "2");
p.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
cards.next(p);
}
});
return p;
}
}
创建一个jpanel并将其布局设置为类似网格的布局,然后向其中添加两个子jpanel,然后将主面板添加到卡布局我可以手动设置子jpanel的大小吗?可以。可以使用适当的布局控制子面板的大小。如果选择网格布局,则两个子面板的大小将相同。可以。但是我可以将1个面板的大小设置为1/4,将其余面板的大小设置为另一个吗?@可以,但您是说边栏和正文内容可以更改为面板1和面板2吗?边栏和标题不应该位于卡片布局的内部。我告诉您的是,如果您希望有2个面板而不是单个正文内容可更改的面板,那么您应该设置适当的布局bodycontentchangable panel并向其添加2个子面板创建一个jpanel并将其布局设置为类似网格的格式,向其添加2个子jpanel,然后将主面板添加到卡布局我可以手动设置子jpanel的大小吗?可以。您可以使用适当的布局来控制子面板的大小。如果选择网格布局,则两个子面板的大小都可以都一样。是的,没关系。但是我可以将1个面板的大小设置为1/4,将其余面板的大小设置为另一个吗?@可以,但您是说边栏和正文内容可以更改为面板1和面板2吗?边栏和标题不应该位于卡片布局的内部。我告诉您的是,如果您希望有2个面板而不是单个正文内容可更改的面板,那么您应该设置适当的布局bodycontentchangable面板,并向iThanks添加2个子面板。我有很多想法。现在更清楚了+1&接受感谢。我有很多想法。现在更清楚了+1&接受