ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 有没有人知道如何布局不移动或重新放大其中任何组件的JToolBar?

2019-08-26 03:03:48  阅读:237  来源: 互联网

标签:java layout swing preferredsize jtoolbar


任何人都可以帮助解决这个问题我正在尝试创建一个JToolBar,我想要修复其所有组件的大小和位置.我已经尝试了一些不同的布局管理器,但是当它们重新调整大小时,它们都会对组件进行居中和/或重新调整大小.

下面是使用GridbagLayout的示例,我还使用了toolbar.add(component)方法使用了默认布局管理器,但结果是相同的:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;

public class ToolBarTest extends JFrame
{
    private JToolBar toolbar;
    private JPanel mainPanel;
    private JPanel toolBarPanel;
    private JButton aButton;
    private JCheckBox aCheckBox;
    private JList aList;
    private Box toolbarBox;
    private GridBagConstraints toolbarConstraints;
    private GridBagLayout toolbarLayout;
    private JLabel shapeLabel;
    private JComboBox<ImageIcon> shapeChooser;
    private JLabel colorLabel;
    private JComboBox colorChooser;

    private String colorNames[] = { "Black" , "Blue", "Cyan", "Dark Gray",
            "Gray", "Green", "Light Gray", "Magenta", "Orange",
            "Pink", "Red", "White", "Yellow", "Custom" };

    private String shapeNames[] = { "Line", "Oval", "Rectangle",
        "3D Rectangle","Paint Brush", "Rounded Rectangle" };

    public ToolBarTest()
    {


        setLayout( new BorderLayout() );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        setSize( 500, 500 );


        add( createToolBar(), BorderLayout.PAGE_START );

        setVisible( true );

    }


    public void addToToolbar( Component component, int row, int column )
    {
        toolbarConstraints.gridx = column;
        toolbarConstraints.gridy = row;
        toolbarConstraints.anchor = GridBagConstraints.WEST;
        toolbarConstraints.fill = GridBagConstraints.NONE;
        toolbarConstraints.weightx = 0;
        toolbarConstraints.weighty = 0;
        toolbarConstraints.gridwidth = 1;
        toolbarConstraints.gridheight = 1;
        toolbarLayout.setConstraints( component, toolbarConstraints );
        toolbar.add( component );

    }// end addToToolbar


    public final JToolBar createToolBar()
    {
        toolbarLayout = new GridBagLayout();
        toolbarConstraints = new GridBagConstraints();

        // create the tool bar which holds the items to draw
        toolbar = new JToolBar();
        toolbar.setBorderPainted(true);
        toolbar.setLayout( toolbarLayout );
        toolbar.setFloatable( true );




        shapeLabel = new JLabel( "Shapes: " );
        addToToolbar( shapeLabel, 0, 1 );


        String iconNames[] = { "PaintImages/Line.jpg", 
            "PaintImages/Oval.jpg", "PaintImages/Rect.jpg",
            "PaintImages/3DRect.jpg","PaintImages/PaintBrush.jpg",
        "PaintImages/RoundRect.jpg"};

        ImageIcon shapeIcons[] = new ImageIcon[ shapeNames.length ];


        // create image icons 
        for( int shapeButton = 0; shapeButton < shapeNames.length; shapeButton++ )
        {

            shapeIcons[ shapeButton ] =
                    new ImageIcon( iconNames[ shapeButton ] );

        }// end for


        shapeChooser = 
                new JComboBox< ImageIcon >( shapeIcons );

        shapeChooser.setSize(  new Dimension( 50, 20 ));

        shapeChooser.setPrototypeDisplayValue( shapeIcons[ 0 ] ); 

        shapeChooser.setSelectedIndex( 0 );

        addToToolbar( shapeChooser, 0, 2 );

        colorLabel = new JLabel( "Colors: " );

        addToToolbar( colorLabel, 0, 3 );

        colorChooser = new JComboBox( colorNames );
        addToToolbar( colorChooser, 0, 4 );


        return toolbar;
    }// end createToolBar

    public static void main( String args[] )
    {
        new ToolBarTest();

    }// end main


}// end class ToolBarTest'

解决方法:

如前所述:JToolBar的默认布局是一个BoxLayout,它尊重组件的maxSize. JComboBox没有合理的最大值,因此您需要子类化并覆盖getMaxSize:

protected JComboBox createCombo(Object[] shapeIcons) {
    return new JComboBox( shapeIcons ) {

        @Override
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }

    };
}

// usage (keep the default layoutManager of the toolbar)
shapeChooser = createCombo(shapeIcons);
toolBar.add(shapeChooser);
... 
colorChooser = createCombo( colorNames );
toolBar.add(colorChooser)

标签:java,layout,swing,preferredsize,jtoolbar
来源: https://codeday.me/bug/20190826/1725569.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有