【发布时间】:2014-07-10 11:41:08
【问题描述】:
我是 CS 的二年级学生(寒假),我正在尝试自学 Swing。归根结底,这只是一个项目,可以添加到我的代码组合中,并加强我在本学期在数据结构和算法中学到的知识。
但是,在进入 Swing 时,我遇到了障碍(也许一次咬得太多)。我一直试图让我的两个JLabels:heading 和dets,在JPaneltbdItem 中出现在彼此下方。
我四处搜索并尝试了一个解决方案here(使用GridLayout() 的解决方案),但这也没有用。
如果您检查下面的代码,我相信我已经正确使用了FlowLayout() 布局管理器,但实际上输出看起来像是忽略了我的JPanel,而是使用了我的JFrame 的布局管理器?此处(错误)输出的图像:
这是我的代码供参考。我真的不明白为什么它不起作用,因为我插入的JPanel 是FlowLayout():
super("To Be Done");
setLocationRelativeTo(null); //Center window on open
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
getContentPane().setBackground(Color.LIGHT_GRAY);
addWindowListener( new CheckOnExit() );
setLayout( new BorderLayout() );
JPanel buttonPanel = new JPanel();
buttonPanel.setBackground(Color.LIGHT_GRAY);
JButton newTask = new JButton("New Task");
newTask.addActionListener( new NewTask() );
newTask.setPreferredSize(new Dimension(130, 40));
buttonPanel.add(newTask);
JButton editTask = new JButton("Edit Task");
editTask.addActionListener( new EditTask() );
editTask.setPreferredSize(new Dimension(130, 40));
buttonPanel.add(editTask);
JButton deleteTask = new JButton("Delete Task");
deleteTask.addActionListener( new DeleteTask() );
deleteTask.setPreferredSize(new Dimension(130, 40));
buttonPanel.add(deleteTask);
add(buttonPanel, BorderLayout.SOUTH);
/* TBD Box to display matters TBD */
JPanel tbdPanel = new JPanel( new FlowLayout() );
JPanel tbdItem = new JPanel( new FlowLayout() ); //
JLabel heading = new JLabel("Heading");
JLabel dets = new JLabel("The Body of the text goes here");
// Make heading bold -- find out if there's a better way to do this
Font font = heading.getFont();
Font boldFont = new Font(font.getFontName(), Font.BOLD, font.getSize());
heading.setFont(boldFont);
tbdItem.add(heading);
tbdItem.add(dets);
tbdPanel.add(tbdItem);
add( tbdPanel, BorderLayout.CENTER ); // Add TBD Panel to CENTER of JFrame
非常感谢。如果解决方案在此站点的某个地方,我深表歉意。如果是的话,我真的找不到。
【问题讨论】:
-
您期望的布局是什么?标题在顶部,标签在底部?在这种情况下,您应该在内部 JPanel 中使用 BorderLayout
标签: java swing layout-manager flowlayout