java - 如何使用 ActionListener 从按钮调用面板
问题描述
所以我正在制作一个从面板跳转到面板的简单程序,并使用动作监听器按钮进行跳转。我使用什么样的方法或操作从面板跳转到面板?
我尝试使用 setVisible(true); 在动作侦听器下,但我得到的只是一个空白屏幕。尝试使用 setContentPane(differentPanel); 但这不起作用。
ackage Com.conebind.Characters;
import Com.conebind.Tech.TechA16;
import Com.conebind.Overviews.OverviewA16;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Char_A16 extends JFrame {
private JButton combosButton16;
private JButton techButton16;
private JButton overviewButton16;
private JLabel Image16;
private JPanel panel16;
private JPanel panelOverviewA16;
public Char_A16() {
overviewButton16.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
OverviewA16 overview16 = new OverviewA16();
overview16.setVisible(true);
overview16.pack();
overview16.setContentPane(new Char_A16().panelOverviewA16);
}
});
techButton16.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Todo
}
});
}
private void createUIComponents(){
Image16 = new JLabel(new ImageIcon("Android 16.png"));
}
public static void main (String[] args){
JFrame frame = new JFrame("Android 16");
frame.setContentPane(new Char_A16().panel16);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);}
}
setContentPane(OverviewA16) 不起作用,因为没有定义面板的对象。
解决方案
请查看这个演示项目,展示如何将 CardLayout 与 IntelliJ IDEA GUI Designer 一起使用。
主窗体有一个在其中显示的 2 个窗体之间切换的方法:
public void showPanel(String id) {
final CardLayout cl = (CardLayout) cardPanel.getLayout();
cl.show(cardPanel, id);
}
在主表单初始化期间,这两种表单都添加到卡片布局中:
FormOne one = new FormOne();
one.setParentForm(this);
cardPanel.add(one.getPanel(), FORM_ONE);
FormTwo two = new FormTwo();
two.setParentForm(this);
cardPanel.add(two.getPanel(), FORM_TWO);
final CardLayout cl = (CardLayout) cardPanel.getLayout();
cl.show(cardPanel, FORM_ONE);
对主父表单的引用使用方法传递给这两个表单,setParentForm()
以便FormOne
类FormTwo
可以访问.showPanel()
MainForm
在更基本的情况下,您可能有一个按钮或其他一些控件来切换直接位于 上的表单MainForm
,然后您可能不需要将主表单引用传递给子表单,但根据您的应用程序逻辑,它仍然很有用。
推荐阅读
- sql - 如何使用 postgresql 或标准 sql 来获取每个事务的总项目数以及与容器关联的总项目数
- javascript - 为什么 Pyinstaller exe 打开并关闭然后再次打开?
- java - Android 在 onBindViewHolder 上设置 setText 后获取值
- c# - 如何在部署环境中摆脱“与此命令关联的 DataReader”
- android - Rad Pack Seattle 的所有蓝牙信标样本均失败
- c# - 它们是“相同”的 CodeWars。我的代码没有通过所有测试
- php - 灵活的 jQuery 复选框禁用每个表格行
- machine-learning - 关于SVM,软边际的作用是什么?
- mysql - MySQL date_format(date, '%Y-%m-%d %h') 在 Presto 中相当于 `day-hour`
- javascript - Div 本身就可以正常工作,但在合并到项目中时却不行