0

很难将 JPanel 添加到 JFrame。我对 java 非常陌生,总是使用 C++ 我需要在一帧内做 4 个面板。

这是我的代码,今天才开始..

package project2;
import javax.swing.JOptionPane;    
import java.awt.FlowLayout;   
import javax.swing.JFrame;    
import javax.swing.JLabel;   
import javax.swing.JPanel;   
import javax.swing.SwingConstants; 
import java.awt.Color;   
import java.awt.GridLayout;   
import java.awt.BorderLayout;   
import javax.swing.*;  
import java.awt.Container;  
import java.awt.Dimension;

public class GUI extends JFrame 
{
    private JPanel Checks; //Panel to Hold Checks
    private JPanel Transactions;
    private JPanel History;
    private JPanel Graphics;
    private JLabel CLabel;


    public GUI()
    {
        super ( "UTB Check-In");
        JPanel Checks = new JPanel(); //set up panel
        CLabel = new JLabel("Label with text");
        Checks.setBackground(Color.red);
        Checks.setLayout( new BoxLayout(Checks,BoxLayout.LINE_AXIS)); 
        add(Checks);


      // JPanel Transactions = new JPanel();
       // Transactions.setToolTipText("Electronic Transactions");
        //Transactions.setBackground(Color.blue);
       // add(Transactions);

    }

}

我试图用不同的颜色将交易和支票放在另一侧,在这种情况下,蓝色和红色不会停留在其中一个或另一个的中间。我的一位同事告诉我,BoxLayout(或任何布局)需要用 size..something 来实现。我不太确定我一直在阅读 http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html

但我仍然没有完全明白。如果有人可以帮助我,谢谢!

4

1 回答 1

2

您的代码失败,因为您直接添加到JFrame默认情况下BorderLayout。您设置BoxLayout到错误的面板。您必须添加到setLayout()要添加的顶级组件(jframe),或者因为我更喜欢添加到 jpanel 而不是直接添加到 jframe 才能完成您想要做的事情。

例子:

public GUI()
{
    super ( "UTB Check-In");

    JPanel parent = new JPanel();
    parent.setLayout(new BoxLayout(parent,BoxLayout.LINE_AXIS));
    add(parent);

    JPanel Checks = new JPanel(); //set up panel
    CLabel = new JLabel("Label with text");
    Checks.setBackground(Color.red);
    parent.add(Checks);


   JPanel Transactions = new JPanel();
   Transactions.setToolTipText("Electronic Transactions");
   Transactions.setBackground(Color.blue);
   parent.add(Transactions);

}

顺便说一句,在 Java 中,变量以小写字母开头作为代码约定。

于 2013-09-27T02:33:54.977 回答