栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有组件的Java布局始终位于右上方

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有组件的Java布局始终位于右上方

签出

OverlayLayout
。它使您可以将组件堆叠在一起。

您需要操纵

setAlignmentX(..)
和setAlignmentY(…)方法来获取所需的布局。这些对齐方式如何协同工作并不总是很直观,但是将组件设置在顶部/左侧相对容易。

这是一个供您使用的小演示:

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;public class OverlayLayoutTest extends JPanel    implements ActionListener{    JPanel green;    JPanel red;    JLabel greenLabel;    JLabel redLabel;    JComboBox  greenAlignmentX;    JComboBox  greenAlignmentY;    JComboBox  redAlignmentX;    JComboBox  redAlignmentY;    public OverlayLayoutTest()    {        setLayout( new BorderLayout(10, 10) );        add(createNorthPanel(), BorderLayout.NORTH);        add(createCenterPanel(), BorderLayout.CENTER);        add(createSouthPanel(), BorderLayout.SOUTH);    }    private JPanel createNorthPanel()    {        JPanel panel = new JPanel();        panel.add( new JLabel("Green:") );        greenLabel = new JLabel();        panel.add( greenLabel );        panel.add( new JLabel("Red:") );        redLabel = new JLabel();        panel.add( redLabel );        return panel;    }    private JPanel createCenterPanel()    {        JPanel panel = new JPanel();        panel.setLayout( new OverlayLayout(panel) );        panel.setBackground( Color.ORANGE );        panel.setPreferredSize( new Dimension(200, 200) );        red = new JPanel();        red.setBackground( Color.RED );        red.setPreferredSize( new Dimension(50, 50) );        red.setMaximumSize( red.getPreferredSize() );        red.setMinimumSize( red.getPreferredSize() );        panel.add( red );        green = new JPanel();        green.setBackground( Color.GREEN );        green.setPreferredSize( new Dimension(100, 100) );        green.setMaximumSize( green.getPreferredSize() );        green.setMinimumSize( green.getPreferredSize() );        panel.add( green );        JPanel wrap = new JPanel();        wrap.add( panel );        return wrap;    }    private JPanel createSouthPanel()    {        JPanel panel = new JPanel( new GridLayout(1, 0, 10, 10) );        JPanel green = new JPanel(new GridLayout(0, 2, 5, 5) );        green.setBorder( new TitledBorder("Green Alignment") );        green.add( new JLabel("X Alignment:") );        greenAlignmentX = createComboBox();        green.add( greenAlignmentX );        green.add( new JLabel("Y Alignment:") );        greenAlignmentY = createComboBox();        green.add( greenAlignmentY );        panel.add( green );        JPanel red = new JPanel(new GridLayout(0, 2, 5, 5) );        red.setBorder( new TitledBorder("Red Alignment") );        red.add( new JLabel("X Alignment:") );        redAlignmentX = createComboBox();        red.add( redAlignmentX );        red.add( new JLabel("Y Alignment:") );        redAlignmentY = createComboBox();        red.add( redAlignmentY );        panel.add( red );        JButton reset = new JButton("Reset Alignment");        reset.addActionListener( this );        panel.add( reset );        return panel;    }    public void actionPerformed(ActionEvent e)    {        green.setAlignmentX( ((Float)greenAlignmentX.getSelectedItem()) );        green.setAlignmentY( ((Float)greenAlignmentY.getSelectedItem()) );        red.setAlignmentX( ((Float)redAlignmentX.getSelectedItem()) );        red.setAlignmentY( ((Float)redAlignmentY.getSelectedItem()) );        JPanel parent = (JPanel)green.getParent();        parent.revalidate();        SwingUtilities.invokeLater(new Runnable()        { public void run() {     greenLabel.setText( green.getLocation().toString() );     redLabel.setText( red.getLocation().toString() ); }        });    }    private JComboBox createComboBox()    {        JComboBox<Float> comboBox = new JComboBox<Float>();        comboBox.addItem( new Float(0f) );        comboBox.addItem( new Float(0.25f) );        comboBox.addItem( new Float(0.5f) );        comboBox.addItem( new Float(0.75f) );        comboBox.addItem( new Float(1.0f) );        comboBox.setSelectedItem(0.5f);        return comboBox;    }    private static void createAndShowUI()    {        Jframe frame = new Jframe("OverlayLayoutTest");        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.add( new OverlayLayoutTest() );        frame.pack();        frame.setLocationByPlatform( true );        frame.setVisible( true );    }    public static void main(String[] args)    {        EventQueue.invokeLater(new Runnable()        { public void run() {     createAndShowUI(); }        });    }}
  1. 将两个组件的对齐X值都设置为1.0
  2. 将两个组件的对齐Y值都设置为0.0

您应该得到想要的布局。

编辑:

缺少有关拖动JInternalframe的部分。因此,您使用JDesktopPane来支持拖动。JDesktopPane使用空布局允许您拖动组件。

没有理由不能将其他组件(JInternalframe除外)添加到桌面。您只需要设置此组件的大小/位置即可在桌面右上角显示。然后,您需要将a添加

ComponentListener
到桌面窗格以侦听
componentResized
事件。触发此事件后,您需要重新确定组件的位置才能将其重置为右上角。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号