首页 / JAVA / java – 彼此相邻的工具栏
java – 彼此相邻的工具栏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 彼此相邻的工具栏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含14855字,纯文字阅读大概需要22分钟。
内容图文
![java – 彼此相邻的工具栏](/upload/InfoBanner/zyjiaocheng/720/4e3863ee19944c28ab5006adb4bc8130.jpg)
我想在JFrame顶部放置两个单独的工具栏,并且能够将每个工具栏单独移动到框架的东,西或南,我尝试使用BorderLayout,但这没有帮助,我知道我可以放置每个一个在BorderLayout的面板上,并能够移动它们,但我真正需要的是将它们放在一起,并且能够单独移动每个,这段代码不起作用,但它有助于理解我的问题,请任何人帮帮我吗?
package test;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class testform extends javax.swing.JFrame {
public testform() {
initComponents();
jPanel1.removeAll();
jPanel1.setPreferredSize(new Dimension(800,800));
MultiBorderLayout amMultiBorderLayout = new MultiBorderLayout(0, 0);
jPanel1.add("North", jToolBar1);
jPanel1.add("North", jToolBar2);
jPanel1.add("Center",jPanel2);
jPanel1.setLayout(amMultiBorderLayout);
jPanel1.revalidate();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jToolBar2 = new javax.swing.JToolBar();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 156, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 31, Short.MAX_VALUE)
);
jLabel1.setText("jLabel1");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(43, Short.MAX_VALUE)
.addComponent(jLabel1)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(71, Short.MAX_VALUE))
);
jToolBar1.setRollover(true);
jButton1.setText("jButton1");
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(jButton1);
jToolBar2.setRollover(true);
jButton2.setText("jButton2");
jButton2.setFocusable(false);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar2.add(jButton2);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 86, Short.MAX_VALUE)
.addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(76, 76, 76)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 63, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 64, Short.MAX_VALUE)))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(64, Short.MAX_VALUE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 103, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 104, Short.MAX_VALUE)))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new testform().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JToolBar jToolBar2;
// End of variables declaration
}
解决方法:
我实现了BorderLayout扩展来支持它.
UPD:使用小型测试应用程序http://java-sl.com/tip_multiple_floatable_toolbars.html的相同代码
在这里使用它而不是BorderLayout jPanel1.setLayout(new java.awt.BorderLayout());
import java.awt.*;
import java.util.Vector;
/**
* Extends BorderLayout with multiple components in the northList, southList, eastList, westList
* and centerList. Layout is used for correct working multiple toolbars.
*
* @author Stanislav Lapitsky
* @version 1.0
*/
public class MultiBorderLayout extends BorderLayout {
/**
* list of the northList region components
*/
Vector northList = new Vector();
/**
* list of the southList region components
*/
Vector southList = new Vector();
/**
* list of the westList region components
*/
Vector westList = new Vector();
/**
* list of the eastList region components
*/
Vector eastList = new Vector();
/**
* list of the centerList region components
*/
Vector centerList = new Vector();
/**
* Constructs default layout instance.
*/
public MultiBorderLayout() {
super();
}
/**
* Constructs new layout instance with defined parameters.
*
* @param hgap the horizontal gap.
* @param vgap the vertical gap.
*/
public MultiBorderLayout(int hgap, int vgap) {
super(hgap, vgap);
}
/**
* Adds the specified component to the layout, using the specified
* constraint object. For border layouts, the constraint must be one of the
* following constants: <code>NORTH</code>, <code>SOUTH</code>, <code>EAST</code>
* , <code>WEST</code>, or <code>CENTER</code>. <p>
*
* Most applications do not call this method directly. This method is called
* when a component is added to a container using the <code>Container.add</code>
* method with the same argument types.
*
* @param name The feature to be added to the LayoutComponent
* attribute.
* @param comp the component to be added.
*/
//the method is deprecated but it's necessary to override it because current class extends
//BorderLayout to provide multiple components (toolbars)
public void addLayoutComponent(String name, Component comp) {
synchronized (comp.getTreeLock()) {
/*
* Special case: treat null the same as "Center".
*/
if (name == null) {
name = "Center";
}
/*
* Assign the component to one of the known regions of the layout.
*/
if ("Center".equals(name)) {
centerList.add(comp);
} else if ("North".equals(name)) {
northList.insertElementAt(comp, 0);
} else if ("South".equals(name)) {
southList.add(comp);
} else if ("East".equals(name)) {
eastList.add(comp);
} else if ("West".equals(name)) {
westList.add(comp);
} else {
throw new IllegalArgumentException("cannot add to layout: unknown constraint: " + name);
}
}
}
/**
* Removes the specified component from this border layout. This method is
* called when a container calls its <code>remove</code> or <code>removeAll</code>
* methods. Most applications do not call this method directly.
*
* @param comp the component to be removed.
*/
public void removeLayoutComponent(Component comp) {
synchronized (comp.getTreeLock()) {
southList.remove(comp);
northList.remove(comp);
centerList.remove(comp);
westList.remove(comp);
eastList.remove(comp);
}
}
/**
* Determines the minimum size of the <code>target</code> container using
* this layout manager. <p>
*
* This method is called when a container calls its <code>getMinimumSize</code>
* method. Most applications do not call this method directly.
*
* @param target the container in which to do the layout.
* @return the minimum dimensions needed to lay out the subcomponents
* of the specified container.
*/
public Dimension minimumLayoutSize(Container target) {
synchronized (target.getTreeLock()) {
Dimension dim = new Dimension(0, 0);
Component c;
if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Component) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getMinimumSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Component) westList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getMinimumSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Component) centerList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getMinimumSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
}
if (northList.size() > 0) {
for (int i = 0; i < northList.size(); i++) {
c = (Component) northList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getMinimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Component) southList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getMinimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
Insets insets = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
}
/**
* Determines the preferred size of the <code>target</code> container using
* this layout manager, based on the components in the container. <p>
*
* Most applications do not call this method directly. This method is called
* when a container calls its <code>getPreferredSize</code> method.
*
* @param target the container in which to do the layout.
* @return the preferred dimensions to lay out the subcomponents of
* the specified container.
*/
public Dimension prefferedLayoutSize(Container target) {
synchronized (target.getTreeLock()) {
Dimension dim = new Dimension(0, 0);
Component c;
if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Component) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Component) westList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
dim.width += d.width + this.getHgap();
dim.height = Math.max(d.height, dim.height);
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Component) centerList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
}
if (northList.size() > 0) {
for (int i = 0; i < northList.size(); i++) {
c = (Component) northList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Component) southList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + this.getVgap();
}
}
Insets insets = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
}
/**
* Lays out the container argument using this border layout. <p>
*
* This method actually reshapes the components in the specified container
* in order to satisfy the constraints of this <code>BorderLayout</code>
* object. The <code>NORTH</code> and <code>SOUTH</code> components, if any,
* are placed at the top and bottom of the container, respectively. The
* <code>WEST</code> and <code>EAST</code> components are then placed on the
* left and right, respectively. Finally, the <code>CENTER</code> object is
* placed in any remaining space in the middle. <p>
*
* Most applications do not call this method directly. This method is called
* when a container calls its <code>doLayout</code> method.
*
* @param target the container in which to do the layout.
*/
public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
Insets insets = target.getInsets();
int top = insets.top;
int bottom = target.getHeight() - insets.bottom;
int left = insets.left;
int right = target.getWidth() - insets.right;
Component c;
if (northList.size() > 0) {
for (int i = 0; i < northList.size(); i++) {
c = (Component) northList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
c.setSize(right - left, d.height);
c.setBounds(left, top, right - left, c.getHeight());
top += d.height;
}
}
if (southList.size() > 0) {
for (int i = 0; i < southList.size(); i++) {
c = (Component) southList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
c.setSize(right - left, d.height);
c.setBounds(left, bottom - d.height, right - left, c.getHeight());
bottom -= d.height;
}
}
if (eastList.size() > 0) {
for (int i = 0; i < eastList.size(); i++) {
c = (Component) eastList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
c.setSize(d.width, bottom - top);
c.setBounds(right - d.width, top, c.getWidth(), bottom - top);
right -= d.width;
}
}
if (westList.size() > 0) {
for (int i = 0; i < westList.size(); i++) {
c = (Component) westList.get(i);
if (!c.isVisible()) {
continue;
}
Dimension d = c.getPreferredSize();
c.setSize(d.width, bottom - top);
c.setBounds(left, top, c.getWidth(), bottom - top);
left += d.width;
}
}
if (centerList.size() > 0) {
for (int i = 0; i < centerList.size(); i++) {
c = (Component) centerList.get(i);
if (!c.isVisible()) {
continue;
}
c.setBounds(left, top, right - left, bottom - top);
}
}
}
}
}
内容总结
以上是互联网集市为您收集整理的java – 彼此相邻的工具栏全部内容,希望文章能够帮你解决java – 彼此相邻的工具栏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。