我正在尝试学习如何使用CardLayout而不是多个JFrame,我正在搞乱我在youtube上找到的代码。我尝试在所有JPanes上调用setSize(),但它不会改变大小并保持最小窗口大小。因为这行代码我无法设置大小的原因是:“panelCont.setLayout(cl);” ?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CLayout {
JFrame frame = new JFrame("CardLayout");
JPanel panelCont = new JPanel();
JPanel panelFirst = new JPanel();
JPanel panelSecond = new JPanel();
JButton buttonOne = new JButton("Switch to second panel");
JButton buttonSecond = new JButton("Switch to first panel");
CardLayout cl = new CardLayout();
public CLayout() {
panelCont.setLayout(cl);
panelFirst.add(buttonOne);
panelSecond.add(buttonSecond);
panelFirst.setBackground(Color.BLUE);
panelSecond.setBackground(Color.GREEN);
panelCont.add(panelFirst, "1");
panelCont.add(panelSecond, "2");
cl.show(panelCont, "1");
buttonOne.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cl.show(panelCont, "2");
}
});
buttonSecond.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cl.show(panelCont, "1");
}
});
frame.add(panelCont);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CLayout();
}
});
}
}
答案 0 :(得分:1)
是的,它适用于CardLayout,但也可以调整大小。例如,您可以嵌套JPanel。或使用这样的东西: 的代码强>
componentDidMount() {
// InteractionManager.runAfterInteractions(() => {
// this.setState({isReady: true});
// })
setTimeout(() => {
this.setState({isReady: true});
}, 75);
}
where组件(这里是JLabel而不是JPanel)的首选集是大小,然后将其放在另一个JPanel中。
我希望这会对你有所帮助。