在gui中更改面板

时间:2015-12-12 18:40:22

标签: java swing

我想要做的是每次按下按钮时更改GUI的右侧。第一个按钮显示JLabel第二个按钮JTextField。小组预期的结果变化。结果是当我按下按钮时没有任何反应。

package javaapplication37;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.*;


public class Gui extends JFrame {
    JTextField f1;
    JPanel b, p1, p2;
    JPanel p3;
    JLabel l1;
    JButton b2, b1;
    String a;
    public Gui() {
        a="Input here";
        setSize(600,600);
        l1=new JLabel("8a petuxei");
        b = new JPanel();
        p3 = new JPanel();
        p1 = new JPanel();
        p2 = new JPanel();
        b.setLayout(new GridLayout(2, 1));
        b1 = new JButton("Eleos");
        b2 = new JButton("elpizw");
        b.add(b1);
        b.add(b2);
        b.setSize(150,600);
        p1.setSize(450,600);
        add(b);
        add(p1);
        ActionListener pou = new Listener(p1);
        b1.addActionListener(pou);
        p2.add(l1);
        f1=new JTextField(a);
        a=f1.getText();
        p3.add(f1);

    }

    public class Listener implements ActionListener {

        JPanel k;

        public Listener(JPanel k) {
            this.k = k;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            k.remove(getContentPane());
            k.add(p2);
        }

    }
    public class l implements ActionListener {

        JPanel k;

        public l(JPanel k) {
            this.k = k;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            k.remove(getContentPane());
            k.add(p3);
        }

    }  
}

1 个答案:

答案 0 :(得分:1)

您需要使用CardLayout。如果您需要帮助,请问我。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class Gui extends JFrame implements ActionListener {

    private JPanel menu = new JPanel();
    private CardLayout contentLayout = new CardLayout();
    private JPanel content = new JPanel(contentLayout);

    private java.util.List<Card> cardList = new ArrayList<>();

    public Gui() {

        int i;
        for (i = 0; i < 10; i++) {
            Card card;
            if(i % 2 == 0) card = new TextAreaCard("Card " + i, "this is the content for card #" + i);
            else card = new LabelCard("Card " + i, "content for Label Card #" + i);

            JButton btn = new JButton(card.name);
            menu.add(btn);
            btn.addActionListener(this);
            content.add(card, card.name);
            cardList.add(card);
        }

        menu.setLayout(new GridLayout(i, 1));
        add(menu, BorderLayout.WEST);
        add(content, BorderLayout.CENTER);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        contentLayout.show(content, e.getActionCommand());
    }

    class Card extends JPanel{
        final String name;

        public Card(String name){
            this.name = name;
        }
    }

    class TextAreaCard extends Card implements ActionListener {

        JTextArea textArea = new JTextArea();
        JButton btn = new JButton("OK");

        public TextAreaCard(String name, String text) {
            super(name);
            textArea.setText(text);
            setLayout(new BorderLayout());
            add(textArea, BorderLayout.CENTER);
            add(btn, BorderLayout.SOUTH);
            btn.addActionListener(this);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(this, textArea.getText(), "click OK", JOptionPane.NO_OPTION);
        }
    }

    class LabelCard extends Card{
        JLabel label = new JLabel();

        public LabelCard(String name, String text) {
            super(name);
            label.setText(text);
            add(label);
        }
    }

    public static void main(String [] args){
        Gui gui = new Gui();
        gui.setSize(600, 500);
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setVisible(true);
    }
}
相关问题