我正在尝试为我之前编写的程序创建一个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:
正如您所看到的,typeSelect
和callNoSelect
两个面板已添加到addPanel
,但它们看起来与我之前添加的标签message_add
不同。我已经测试了添加另一个标签,它看起来我想要的,但由于某种原因我不能让面板做同样的事情。
我希望页面看起来像这样:
*
另外我在addPanel
中拥有这一切的原因是我将要向用户显示其他面板,我将根据需要关闭和打开可见性。我将addPanel作为BorderLayout的原因是,一旦我弄清楚如何让中心得到我想要的东西,我最终会在东部和南部象限中有更多的控件。
*我在绘画中创建了正确的GUI,以便更好地展示我想要的内容
答案 0 :(得分:1)
JLabel
是透明的,而JPanel
则不是。JLabel
。因此,info
显示typeSelect
面板的背景颜色,该颜色为白色,而callNoText
和setOpaque(false)
使用自己的默认颜色。您可以使用info
或更改其背景颜色以匹配GridBagLayout
面板
关于您的布局,您可以考虑使用更灵活的内容,例如CADisplayLink
,有关详细信息,请参阅How to Use GridBagLayout和Laying Out Components Within a Container