7

我想在 JFrame 上显示 2 个对象。我尝试将对象添加到 JPanel,然后将 JPanel 添加到 JFrame,但它也不起作用。我还尝试将 ball 和 ball1 对象直接添加到 JFrame 但它仅显示最后添加的对象。我想一次在 JFrame 上显示两个对象。下面给出的代码只显示了 ball1 对象。

    JFrame f = new JFrame("Moving"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //making 2 objects 
    Ballbewegung2 ball = new Ballbewegung2();
    Ballbewegung3 ball1 = new Ballbewegung3(); 
    JPanel contentPane = new JPanel(new BorderLayout());
    JPanel contentPane1 = new JPanel(new BorderLayout());

    //adding objects to JPanel
    contentPane.add(ball, BorderLayout.CENTER);                 
    contentPane1.add(ball1, BorderLayout.CENTER);                 

    //Adding JPanel to JFrmae
    f.getContentPane().add(contentPane);
    f.getContentPane().add(contentPane1);
    f.setSize(500, 500);
    f.setVisible(true);  
4

3 回答 3

5

我建议您使用 JPanel 将您的两个 JPanel 作为子级,并将单个 JPanel 添加到 JFrame 内容窗格。

如果您没有明确指定不同的布局位置,则对 JFrame.add() 方法的第二次调用将替换第一次添加的 JPanel。

一个使用 BoxLayout 的简单示例:

JPanel mainPanel= new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

mainPanel.add(contentPane);
mainPanel.add(contentPane1);
contentPane.add(mainPanel);
于 2012-10-03T14:32:41.547 回答
4

默认情况下,内容窗格JFrame具有BorderLayout布局管理器。这意味着如果您向其中添加组件,它将被放置在 CENTER 中。如果您向其中添加另一个组件,它将再次放入 CENTER 并替换先前添加的组件。

如何添加多个组件的示例:

JFrame f = new JFrame();

JPanel p = new JPanel();

p.add( new JButton( "One" ) );
p.add( new JButton( "Two" ) );

f.getContentPane().add( p, BorderLayout.CENTER );

或者在将组件添加到内容窗格时,指定放置它的位置(并指定不同的位置):

JFrame f = new JFrame();

f.getContentPane().add( new JButton( "One" ), BorderLayout.NORTH );
f.getContentPane().add( new JButton( "Two" ), BorderLayout.CENTER );
于 2012-10-03T14:32:16.247 回答
1

这是一个实现这样的 UI 的示例

用户界面

使用的Java组件如下 Java 组件

代码:

// Call this function from the main
private static void createAndShowGUI() {
    // Create and set up the content pane.
    MainPanel panel = new MainPanel();
    panel.setOpaque(true); // content panes must be opaque

    // Display the window.
    JFrame frmConsole = new JFrame("ITSME");
    frmConsole.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmConsole.setPreferredSize(new Dimension(640, 480));
    frmConsole.add(panel);
    frmConsole.pack();
    frmConsole.setLocationRelativeTo(null);
    frmConsole.setVisible(true);
}

类主面板

public class MainPanel extends JPanel implements ActionListener {
    private static final long serialVersionUID = 1L;
    private int m_nX, m_nY;
    private int m_nHeight = 30, m_nWidthLabel = 500, m_nPadding = 2;

    private JLabel m_lblFilename, m_lblFileGen;

    public MainPanel() {
        // TODO Auto-generated constructor stub
        super(new BorderLayout());
        try {
            this.setLayout(null); 
            this.setBorder(new TitledBorder(new EtchedBorder(),
                "Dynamic Time Warping"));

            m_nX = this.getX() + 12;
            m_nY = this.getY() + 24;

            // Add the Filename Label
            m_lblFilename = new JLabel("Label1");
            m_lblFilename.setBorder(new LineBorder(Color.BLUE, 2));
            m_lblFilename.setBounds(nX, nY, m_nWidthLabel, m_nHeight);
            this.add(m_lblFilename);

            // Adding a Label
            nY += m_lblFilename.getHeight() + m_nPadding;
            m_lblFileGen = new JLabel("Label1");
            m_lblFileGen.setBorder(new LineBorder(Color.RED, 2));
            m_lblFileGen.setBounds(nX, nY, m_nWidthLabel, 3 * m_nHeight);
            m_lblFileGen.setForeground(Color.BLUE);
            this.add(m_lblFileGen);
        } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2017-04-06T12:19:24.290 回答