开发者

how to modify current JPanel and JFrame in java

开发者 https://www.devze.com 2023-03-18 03:43 出处:网络
I am using the following code: class ButtonPanel extends JPanel implements ActionListener { public ButtonPanel()

I am using the following code:

class ButtonPanel extends JPanel implements ActionListener
{
   public ButtonPanel()
   {
       yellowButton=new JButton("Yellow");
       blueButton=new JButton("Blue");
       redButton=new JButton("Red");

       add(yellowButton);
       add(blueButton);
       add(redButton);

       yellowButton.addActionListener(this);
       blueButton.addActionListener(this);
       redButton.addActionListener(this);

    }
    public void actionPerformed(ActionEvent evt)
    {
       Object source=evt.getSource();
       Color color=getBackground();
       if(source==yellowButton) color=Color.yellow;
       else if (source==blueButton) color=Color.blue;
       else if(source==redButton) color=Color.red;
       setBackground(color);
       repaint();
    }
    private JButton yellowButton;
    private JButton blueButton;
    priva开发者_StackOverflowte JButton redButton;
}
class ButtonFrame extends JFrame
{
   public ButtonFrame()
   {
      setTitle("ButtonTest");
      setSize(400,400);
      addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent e)
         {
            System.exit(0);
          }
       });
      Container contentPane=getContentPane();
      contentPane.add(new ButtonPanel());
   }
}
public class ButtonTest
{
  public static void main(String args[])
  {
    JFrame frame=new ButtonFrame();
    frame.show();
  }
}

In actionperformed() I want to modify my panel and add some more component, is there any way to do this?


Yes.

Just call add() for the panel and then revalidate() and repaint();


but in actionperformed() i want to modify my panel and want to add some more component... Is there any way to do this....

Yes, you can add the components to the JPanel or "this" via the add(...) method, and you'll need to call revalidate() and then sometimes repaint() (especially if you also remove components) on the JPanel (this). But before you do this, if you haven't already done so, I think that you'll want to read the tutorials on using the layout managers so you can add components that are well situated.


hmmm I hard to comment anything, there are lots of mistakes, please start with this code

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ButtonPanel extends JPanel implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JButton yellowButton;
    private JButton blueButton;
    private JButton redButton;

    public ButtonPanel() {
        yellowButton = new JButton("Yellow");
        yellowButton.addActionListener(this);
        blueButton = new JButton("Blue");
        blueButton.addActionListener(this);
        redButton = new JButton("Red");
        redButton.addActionListener(this);
        add(yellowButton);
        add(blueButton);
        add(redButton);
        setPreferredSize(new Dimension(400, 400));
    }

    @Override
    public void actionPerformed(ActionEvent evt) {
        Object source = evt.getSource();
        Color color = getBackground();
        if (source == yellowButton) {
            color = Color.yellow;
        } else if (source == blueButton) {
            color = Color.blue;
        } else if (source == redButton) {
            color = Color.red;
        }
        setBackground(color);
        revalidate();
        repaint();
    }

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

            @Override
            public void run() {
                JFrame frame = new JFrame("ButtonTest");
                frame.addWindowListener(new WindowAdapter() {

                    @Override
                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                });
                frame.add(new ButtonPanel());
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消