Java swing;如何切换面板';能见度如何?
我编写此代码是为了在panel1和panel2之间导航 有按钮 (button1和button2)但当我运行代码时,框架保持为空 有人能解释一下我做错了什么,以及我是如何做到的吗 以这种方式在panel1和panel2之间切换?首先从panel1开始 代码: 提前感谢使用版面管理器Java swing;如何切换面板';能见度如何?,java,swing,toggle,visibility,jpanel,Java,Swing,Toggle,Visibility,Jpanel,我编写此代码是为了在panel1和panel2之间导航 有按钮 (button1和button2)但当我运行代码时,框架保持为空 有人能解释一下我做错了什么,以及我是如何做到的吗 以这种方式在panel1和panel2之间切换?首先从panel1开始 代码: 提前感谢使用版面管理器 frame.setLayout(新的FlowLayout()) 另一个有用的方法是使用CardLayout,并将两个JPanel添加到使用此CardLayout的容器中,我认为更好。然后,您可以通过调用CardLay
frame.setLayout(新的FlowLayout()) 另一个有用的方法是使用CardLayout,并将两个JPanel添加到使用此CardLayout的容器中,我认为更好。然后,您可以通过调用CardLayout方法轻松交换视图 e、 g
哇,真管用!就这么简单?哈哈,这到底增加了什么,让它更像一种学习体验?布局管理器负责设置屏幕上所有组件的位置和大小。如果不使用布局管理器,则必须自己进行所有定位和大小调整。下面是布局管理器使用不同布局管理器的一个很好的解释--
JFrame
的内容窗格默认使用BorderLayout
。add()
将两个默认值都调用到CENTER
,并且只有一个组件可以在那里,因此第二个组件将覆盖第一个组件。对于。重新格式化的代码;如果不正确,请回复。哦,是的,我也考虑过CardLayout,你能从CardLayout中获得其他方法所没有的一些好处吗?:)CardLayout将确保大小合适,容器的preferredSize将是最大卡组件的preferredSize。CardLayout负责重新验证和重新喷漆,因此更难把事情搞砸。它还允许顺序更改卡(通过next()和previous()方法)和随机访问更改卡(通过使用用于将卡添加到容器中的字符串常量)。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class togglepanel {
public static void main(String[] args) {
final JFrame frame = new JFrame();
final JPanel panel1 = new JPanel();
final JPanel panel2 = new JPanel();
JButton button1 = new JButton("previous frame!");
JButton button2 = new JButton("next frame");
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setVisible(true);
frame.setSize(600, 400);
frame.add(panel1);
frame.add(panel2);
panel1.add(button2);
panel1.setVisible(true);
panel2.add(button1);
panel2.setVisible(false);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
panel1.setVisible(true);
panel2.setVisible(false);
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
panel1.setVisible(false);
panel2.setVisible(true);
}
});
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TogglePanel {
public static void main(String[] args) {
final CardLayout cardlayout = new CardLayout();
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Container contentPane = frame.getContentPane();
contentPane.setLayout(cardlayout);
final JPanel panel1 = new JPanel();
final JPanel panel2 = new JPanel();
JButton button1 = new JButton("previous frame!");
JButton button2 = new JButton("next frame");
contentPane.setPreferredSize(new Dimension(600, 400));
contentPane.add(panel1, "Panel 1");
contentPane.add(panel2, "Panel 2");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setVisible(true);
panel1.add(button2);
panel2.add(button1);
ActionListener btnListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardlayout.next(contentPane);
}
};
button1.addActionListener(btnListener);
button2.addActionListener(btnListener);
}
}