// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= DevFaqOrderAttributes
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqOrderAttributes
:description: Apache NetBeans wiki DevFaqOrderAttributes
:toc: left
:toc-title:
:syntax: true

=== How do I specify the order for my menu items/toolbar buttons/files in the system filesystem?

If you are using module development support the IDE,
you can manage the order of menu or toolbar items
by the help of special node *XML Layer*
which can be found underneath your *Important Files*.
Just find your menu/toolbar item and drag and drop it wherever you need.
Appropriate content in the project metadata (layer file) will be generated for you.
If this does not work, or you want to know more, read on.

`FileObject`s (link:DevFaqFileObject.asciidoc[DevFaqFileObject]) in a folder have no defined order by default.
You can use `FileUtil.getOrder` to sort them.
(`DataObject`s (link:DevFaqDataObject.asciidoc[DevFaqDataObject]) in a folder are always sorted this way.)
The order is determined by numeric `position` attributes.
For all details, see: link:FolderOrdering103187.asciidoc[FolderOrdering103187]

<hr/>
Applies to: NetBeans 6.5 and later

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/DevFaqOrderAttributes[http://wiki.netbeans.org/DevFaqOrderAttributes] , 
that was last modified by NetBeans user Jglick 
on 2009-12-03T14:01:08Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
