无法使用Swing将Jpanel正确添加到BoxLayout

时间:2015-12-01 23:45:59

标签: java swing jpanel

我正在尝试为我之前编写的程序创建一个GUI,但是在调整某些面板时我遇到了一些问题。目前我有这个代码。

package javaapplication10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.border.EmptyBorder;

public class GUITest extends JFrame {

    public static final int WIDTH = 425;
    public static final int HEIGHT = 250;

    JPanel addPanel;
    JComboBox referenceList;
    JTextField callNoText;

    public static void main(String[] args) {
        GUITest gui = new GUITest( );
        gui.setVisible(true);
    }

    public GUITest( )
    {
        super("Library Search");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));

        addPanel = new JPanel( );
        addPanel.setBackground(Color.WHITE);
        addPanel.setVisible(true);
        addPanel.setLayout(new BorderLayout());

        JPanel info = new JPanel();
        info.setBackground(Color.WHITE);
        info.setLayout(new BoxLayout(info, BoxLayout.Y_AXIS));

        JLabel message_add = new JLabel("Adding a reference.");
        message_add.setBorder(new EmptyBorder(10, 10, 0, 0));
        message_add.setAlignmentX(Component.LEFT_ALIGNMENT);

        JPanel typeSelect = new JPanel(new FlowLayout());
        typeSelect.add(new JLabel("Type: "));
        String[] references = {"Book", "Journal"};
        referenceList = new JComboBox(references);
        typeSelect.add(referenceList);
        typeSelect.setAlignmentX(Component.LEFT_ALIGNMENT);

        JPanel callNoSelect = new JPanel();
        callNoText = new JTextField(20);
        callNoSelect.add(new JLabel("Call No:\t"));
        callNoSelect.add(callNoText);
        callNoSelect.setAlignmentX( Component.LEFT_ALIGNMENT );

        info.add(message_add);
        info.add(typeSelect);
        info.add(callNoSelect);

        addPanel.add(info, BorderLayout.CENTER);
        add(addPanel);

        JMenu commandMenu = new JMenu("Commands");
        JMenuItem addChoice = new JMenuItem("Add");
        commandMenu.add(addChoice);
        JMenuItem searchChoice = new JMenuItem("Search");
        commandMenu.add(searchChoice);
        JMenuItem quitChoice = new JMenuItem("Quit");
        commandMenu.add(quitChoice);

        JMenuBar bar = new JMenuBar( );
        bar.add(commandMenu);
        setJMenuBar(bar);
    }

}

这将创建一个如下所示的GUI:Current GUI

正如您所看到的,typeSelectcallNoSelect两个面板已添加到addPanel,但它们看起来与我之前添加的标签message_add不同。我已经测试了添加另一个标签,它看起来我想要的,但由于某种原因我不能让面板做同样的事情。 我希望页面看起来像这样:

Correct GUI *

另外我在addPanel中拥有这一切的原因是我将要向用户显示其他面板,我将根据需要关闭和打开可见性。我将addPanel作为BorderLayout的原因是,一旦我弄清楚如何让中心得到我想要的东西,我最终会在东部和南部象限中有更多的控件。

*我在绘画中创建了正确的GUI,以便更好地展示我想要的内容

1 个答案:

答案 0 :(得分:1)

JLabel是透明的,而JPanel则不是。JLabel。因此,info显示typeSelect面板的背景颜色,该颜色为白色,而callNoTextsetOpaque(false)使用自己的默认颜色。您可以使用info或更改其背景颜色以匹配GridBagLayout面板

的透明度,使其他面板透明

关于您的布局,您可以考虑使用更灵活的内容,例如CADisplayLink,有关详细信息,请参阅How to Use GridBagLayoutLaying Out Components Within a Container