如何在java中修改当前的JPanel和JFrame

时间:2011-07-06 10:35:24

标签: java swing

我使用以下代码:

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;
    private 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();
  }
}

actionperformed()我想修改我的面板并添加更多组件,有没有办法做到这一点?

3 个答案:

答案 0 :(得分:5)

只需为面板调用add(),然后重新验证()和重绘();

答案 1 :(得分:5)

  

但是在actionperformed()中我想修改我的面板并想要添加更多组件......有没有办法做到这一点......

是的,你可以通过add(...)方法将组件添加到JPanel或“this”,你需要调用revalidate()然后有时重绘()(特别是如果你也删除了组件) )在JPanel(这)上。但是在你这样做之前,如果你还没有这样做,我想你会想要阅读关于使用layout managers的教程,这样你就可以添加位置很好的组件。

答案 2 :(得分:3)

嗯我很难发表任何评论,有很多错误,请从这段代码开始

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);
            }
        });
    }
}