【问题标题】:How to add JPanel to JFrame from different classes如何将 JPanel 从不同的类添加到 JFrame
【发布时间】:2013-03-18 16:25:02
【问题描述】:

如何将 JPanel 添加到 JFrame?这真的让我很困惑。我想将 JPanel 添加到 JFrame。我已经尝试了各种方法,包括扩展,但我无法让它工作。

事件

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

    public class events {


public static void main (String args[]) {
 Time timeObject = new Time();

    JFrame mainJFrame;
    mainJFrame = new JFrame();
    mainJFrame.setLayout(BorderLayout());
    mainJFrame.setVisible(true);        
    mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainJFrame.setSize(600,400);
    mainJFrame.setVisible(true); 
    mainJFrame.setLayout(new BorderLayout());
    mainJFrame.setTitle("Travel Agent System");
    mainJFrame.setBackground(Color.BLUE);
    timeObject.selectButton();
}
}

时间

    import javax.swing.JOptionPane;

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

public class Time{

  public static void selectButton()
  JButton timeButton = new JButton("Time");
  JButton moneyButton = new JButton("Money");
  JButton hotelButton = new JButton("Hotel");
  JButton exitButton = new JButton("Exit");
   JPanel buttonPanel = new JPanel();
  buttonPanel.setBackground(Color.RED);
  buttonPanel.add(timeButton,moneyButtons,hotelButton,exitButton);

  }

【问题讨论】:

    标签: java swing jframe jpanel layout-manager


    【解决方案1】:

    查看此来源。注意 cmets。

    import javax.swing.JOptionPane;
    import java.awt.Color;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class events {
    
        public static void main (String args[]) {
            Time timeObject = new Time();
    
            JFrame mainJFrame;
            mainJFrame = new JFrame();
            // Coding by magic!
            //mainJFrame.setLayout(BorderLayout());
            mainJFrame.setLayout(new BorderLayout());
            mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // don't do this, just call pack() later
            //mainJFrame.setSize(600,400);
            mainJFrame.setLayout(new BorderLayout());
            mainJFrame.setTitle("Travel Agent System");
            mainJFrame.setBackground(Color.BLUE);
    
            timeObject.selectButton();
            mainJFrame.add(timeObject.getGUI());
    
            mainJFrame.pack();
            // should be last.
            mainJFrame.setVisible(true);
        }
    }
    
    class Time {
    
        private JPanel buttonPanel;
    
        // don't use static unless necessary - it is not necessary.
        //public static void selectButton() {
        public void selectButton() {
            JButton timeButton = new JButton("Time");
            JButton moneyButton = new JButton("Money");
            JButton hotelButton = new JButton("Hotel");
            JButton exitButton = new JButton("Exit");
            buttonPanel = new JPanel();
            buttonPanel.setBackground(Color.RED);
            buttonPanel.add(timeButton);
            buttonPanel.add(moneyButton);
            buttonPanel.add(hotelButton);
            buttonPanel.add(exitButton);
        }
    
        public JComponent getGUI() {
            return buttonPanel;
        }
    }
    

    【讨论】:

      【解决方案2】:

      将 JFrame 对象传递给 selectButton():

      timeObject.selectButton(mainJFrame);
      

      然后使用该 JFrame 对象将 JPanel 添加到它。

      public static void selectButton(JFrame frame)
        {
          JButton timeButton = new JButton("Time");
          JButton moneyButton = new JButton("Money");
          JButton hotelButton = new JButton("Hotel");
          JButton exitButton = new JButton("Exit");
          JPanel buttonPanel = new JPanel();
          buttonPanel.setBackground(Color.RED);
          buttonPanel.add(timeButton,moneyButtons,hotelButton,exitButton);
          frame.getContentPane().add(buttonPanel,BorderLayout.CENTER); // i've added to CENTER.
        }
      

      这会将 JPanel 添加到 JFrame 的 CENTER。

      【讨论】:

        【解决方案3】:

        这是实现 JFrame 类然后将 JPanel 添加到 JFrame 和其他 JPanel 的一个很好的示例。

        Link to another StackOverflow question/answer

        【讨论】:

        • 这让我更加困惑,是否有任何简单的示例可以帮助我理解,例如我编写的代码用作示例,而且我要创建的程序将有很多 Jpanels,因此我需要创建超过 1 个类
        猜你喜欢
        • 1970-01-01
        • 2014-08-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多