Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以指向特定的JPanel_Java_Swing_User Interface_Jpanel_Cardlayout - Fatal编程技术网

Java 是否可以指向特定的JPanel

Java 是否可以指向特定的JPanel,java,swing,user-interface,jpanel,cardlayout,Java,Swing,User Interface,Jpanel,Cardlayout,我有一个使用CardLayout的程序。我有不同属性的不同面板。我有一个名为“回车”的按钮,我决定在每个面板上重复使用它,但是单击该按钮时,每个面板执行不同的操作。有没有办法说,当按钮被点击,但我在一个特定的面板,然后这样做。如何直接指向面板?您可以让面板在每次创建卡时为按钮分配一个ActionListener。这样,特定面板的构造函数可以确定按钮的功能 您可以让面板在每次创建卡时为按钮分配一个ActionListener。这样,特定面板的构造函数可以确定按钮的功能 >首先要考虑的是:你不能向一

我有一个使用CardLayout的程序。我有不同属性的不同面板。我有一个名为“回车”的按钮,我决定在每个面板上重复使用它,但是单击该按钮时,每个面板执行不同的操作。有没有办法说,当按钮被点击,但我在一个特定的面板,然后这样做。如何直接指向面板?

您可以让面板在每次创建卡时为按钮分配一个
ActionListener
。这样,特定面板的构造函数可以确定按钮的功能

您可以让面板在每次创建卡时为按钮分配一个
ActionListener
。这样,特定面板的构造函数可以确定按钮的功能

>首先要考虑的是:你不能向一个面板添加一个按钮,每个面板应该有它自己的组件。

如果在多个面板中添加一个按钮,请说:

JButton b = new JButton("Button");
//....
pan1.add(b);
pan2.add(b);
pan3.add(b);
在这种情况下,按钮将添加到最后一个面板,表示
pan3
,另一个将不显示按钮

其次,我想从评论中提到一个垃圾神的好例子,为了避免混淆,请看这个例子:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class CardLayoutDemo extends JFrame implements ActionListener {
    private CardLayout cardLayout;
    private JButton pan1,pan2;
    private JPanel mainPanel;
    public CardLayoutDemo(){
        cardLayout = new CardLayout();
         mainPanel = new JPanel(cardLayout);
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        pan1 = new JButton("To Second Panel");
        pan2= new JButton ("To First Panel");
        pan1.addActionListener(this);
        pan2.addActionListener(this);
        p1.setBackground(Color.green);
        p2.setBackground(Color.BLUE.brighter());
        p1.add(pan1);
        p2.add(pan2);
        mainPanel.add(p1,"1");
        mainPanel.add(p2,"2");
        cardLayout.show(mainPanel, "1");

        add(mainPanel);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setVisible(true);
        pack();
    }
    @Override
    public void actionPerformed(ActionEvent ev){
        if(ev.getSource()==pan1)
            cardLayout.show(mainPanel, "2");
        else if(ev.getSource()==pan2)
            cardLayout.show(mainPanel, "1");
    }

    public static void main(String...args){
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
              new CardLayoutDemo().setVisible(true);

            }
        });
    }
}

你首先要考虑的是:你不能向一个面板添加一个按钮,每个面板都应该有它自己的组件。 如果在多个面板中添加一个按钮,请说:

JButton b = new JButton("Button");
//....
pan1.add(b);
pan2.add(b);
pan3.add(b);
在这种情况下,按钮将添加到最后一个面板,表示
pan3
,另一个将不显示按钮

其次,我想从评论中提到一个垃圾神的好例子,为了避免混淆,请看这个例子:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class CardLayoutDemo extends JFrame implements ActionListener {
    private CardLayout cardLayout;
    private JButton pan1,pan2;
    private JPanel mainPanel;
    public CardLayoutDemo(){
        cardLayout = new CardLayout();
         mainPanel = new JPanel(cardLayout);
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        pan1 = new JButton("To Second Panel");
        pan2= new JButton ("To First Panel");
        pan1.addActionListener(this);
        pan2.addActionListener(this);
        p1.setBackground(Color.green);
        p2.setBackground(Color.BLUE.brighter());
        p1.add(pan1);
        p2.add(pan2);
        mainPanel.add(p1,"1");
        mainPanel.add(p2,"2");
        cardLayout.show(mainPanel, "1");

        add(mainPanel);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setVisible(true);
        pack();
    }
    @Override
    public void actionPerformed(ActionEvent ev){
        if(ev.getSource()==pan1)
            cardLayout.show(mainPanel, "2");
        else if(ev.getSource()==pan2)
            cardLayout.show(mainPanel, "1");
    }

    public static void main(String...args){
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
              new CardLayoutDemo().setVisible(true);

            }
        });
    }
}

节目在哪里?你忘了分享代码了吗?例如。我确实有代码,但我认为没有必要发布它。我只是想问一个更一般的问题,关于如何做某件事,而不是我代码中的某个特定问题。程序在哪里?你忘了分享代码了吗?例如。我确实有代码,但我认为没有必要发布它。我只是想问一个关于如何做某件事的更一般的问题,而不是我的代码中的一些特定问题。谢谢你的回答。我以前使用过事件处理程序,但我不确定这是否可行。我希望避免在代码中使用太多组件。但是我决定继续为每个面板创建不同的按钮。谢谢你的回答。我以前使用过事件处理程序,但我不确定这是否可行。我希望避免在代码中使用太多组件。然而,我决定继续为每个面板创建不同的按钮。