当我使用Java的SpringLayout管理器时,我有一个非常奇怪的问题。我很想让工具栏出现在我的程序中。它在我的程序的早期工作,现在它不起作用。基本上,如果我从JPanel的实例化中删除layout参数,我在JPanel中添加的元素会显示出来,尽管没有我的自定义。如果我在实例化中有该参数,则工具栏根本不会出现。我不知道我搞砸了什么或做错了什么。 JPanel正在进入一个中心JFrame,我已经从BorderLayout更改为另一个SpringLayout,什么都没有,它似乎不会影响这个问题。
public class purchaserApp
{
static JFrame mainWindow; //Main window
static JFrame addView = new JFrame ("Add An Item..."); //Add item window
static JFrame aboutView = new JFrame ("About Purchaser"); //About window
static JFrame helpView = new JFrame ("Purchaser Help"); //Help window
static JPanel toolBar, contentArea, previewPane; //Panels for GUI
static JRootPane root;
static JToolBar toolBar2;
//SpringLayout mainLayout;
JTable table;
public purchaserApp()
{
makemainWindow();
makeMenu();
makeToolbar();
// makeMainContentView();
mainWindow.setVisible(true);
}
public void makeToolbar()
{
SpringLayout tbLayout = new SpringLayout();
toolBar = new JPanel(tbLayout); //this is the offending line of code, if I remove "tbLayout" the buttons show up in the GUI but obviously without the customizations I made below...
JButton toolBarButtons[];
String buttonNames[] = {"Add", "Edit", "Delete"};
//Instantiate buttons for toolbar
toolBarButtons = new JButton[3];
//Resize
Dimension d = new Dimension (40,55);
//Add/modify/whatever
for (i = 0; i < 3; i++)
{
toolBarButtons[i] = new JButton(buttonNames[i]);
toolBarButtons[i].setPreferredSize(d);
tbLayout.putConstraint(SpringLayout.NORTH, toolBarButtons[i], 5, SpringLayout.NORTH, toolBar);
}
//Adjust constraints
tbLayout.putConstraint(SpringLayout.WEST, toolBarButtons[0], 5, SpringLayout.WEST, toolBar);
tbLayout.putConstraint(SpringLayout.WEST, toolBarButtons[1], 5, SpringLayout.EAST, toolBarButtons[0]);
tbLayout.putConstraint(SpringLayout.EAST, toolBarButtons[2], -5, SpringLayout.EAST, toolBar); //due to x-axis, we must go negative to get inside the frame
for (i = 0; i < 3; i++)
toolBar.add(toolBarButtons[i]);
mainWindow.add(toolBar,BorderLayout.NORTH); //Lies! Does not add
}
我在这里列出了类和违规方法。我非常感谢任何帮助,因为我确信我不是第一个遇到这个问题的人。如果这是一个相对简单的修复我并且没有看到它,我也道歉。我还是Java GUI(以及一般的Java)的新手,所以请原谅。
答案 0 :(得分:0)
为什么要尝试使用面板创建工具栏? JToolBar有什么问题,它使用自己的自定义布局?
即使您确实创建了自定义工具栏面板,我也不会使用SpringLayout,它太复杂了。只需使用FlowLayout或水平BoxLayout。
阅读Layout Managers上的Swing教程,了解每个布局管理器的工作示例。
答案 1 :(得分:0)
如本相关question所述,约束规范的顺序可能很重要,特别是如果生成的布局为over-constrained。根据版本的不同,您可能需要在EAST/SOUTH
约束之前指定WEST/NORTH
约束,如here所述。