java Swing组件随着窗口拖动等比移动或等比放大

实现原理很简单,

1清空布局(使用绝对布局)

2添加监听器(监听窗口是否被拖动)

3在监听器里面动态调整 组件的位置

效果如下:

拖动之后效果:

代码实现:

import java.awt.EventQueue;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;

public class Test {

    private JFrame frame;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test window = new Test();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Test() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);//清空布局

        JLabel label = new JLabel("标签");
        label.setBounds(81, 63, 61, 16);
        frame.getContentPane().add(label);

        JButton button = new JButton("按钮");
        button.setBounds(252, 58, 117, 29);
        frame.getContentPane().add(button);

        textField = new JTextField();
        textField.setText("文本框");
        textField.setBounds(81, 110, 288, 26);
        frame.getContentPane().add(textField);
        textField.setColumns(10);

        frame.addComponentListener(new ComponentAdapter() {//拖动窗口监听
            public void componentResized(ComponentEvent e) {
                int whidth=frame.getWidth();//获取窗口宽度
                int height=frame.getHeight();//获取窗口高度  你也可以设置高度居中
                //将lable放在 窗口左边的1/3处
                label.setBounds(whidth/3, 63, 61, 16);//(起始点x,起始点y,宽地w,高h)  标签设置宽高不明显
                //将lable放在 窗口左边的1/2处
                button.setBounds(whidth/2, 63, 61, 16);//(起始点x,起始点y,宽地w,高h)
                //宽度始终是窗口的1/2
                textField.setBounds(81, 110, whidth/2, 26);//(起始点x,起始点y,宽地w,高h)
            }  

        }); 

    }

}

原文地址:https://www.cnblogs.com/easyidea/p/11026032.html

时间: 2024-11-04 21:52:32

java Swing组件随着窗口拖动等比移动或等比放大的相关文章

JAVA Swing 组件演示***

下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.Ac

java Swing组件和事件处理(二)

1.BoxLayout类可以创建一个布局对象,成为盒式布局,BoxLayout在javax.Swing  border 包中,java.swing 包提供一个Box类,该类也是一个类,创建的容器称作一个盒式布局,不   允许盒式容器的布局.在策划程序布局的时候,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局的目的. 使用盒式布局的容器组件将排列一行或一列,这取决于创建盒式布局对象时,是否确定行的排列和列的排列, package com.Example2; import javax.sw

java Swing组件之JSplitPane使用

使用 JSplitPane.HORIZONTAL_SPLIT 可让分隔窗格中的两个 Component 从左到右排列,或者使用 JSplitPane.VERTICAL_SPLIT 使其从上到下排列.改变 Component 大小的首选方式是调用 setDividerLocation,其中 location 是新的 x 或 y 位置,具体取决于 JSplitPane 的方向. 要将 Component 调整到其首选大小,可调用 resetToPreferredSizes. 1.常见构造方法 JSp

Java Swing组件JScrollPane

当一个容器内放置了许多组件,而容器的显示区域不足以同时显示所有组件时,如果让容器带滚动条,通过移动滚动条的滑块,容器中位置上的组件就能看到.滚动面板JScrollPane能实现这样的要求,JScrollPane是带有滚动条的面板.JScrollPane是Container类的子类,也是一种容器,但是只能添加一个组件.JScrollPane的一般用法是先将一些组件添加到一个JPanel中,然后再把这个JPanel添加到JScrollPane中.这样,从界面上看,在滚动面板上,好像也有多个组件.在S

Java Swing设置主窗口位置居中方法

01.第一种方法 int windowWidth = frame.getWidth(); //获得窗口宽 int windowHeight = frame.getHeight(); //获得窗口高 Toolkit kit = Toolkit.getDefaultToolkit(); //定义工具包 Dimension screenSize = kit.getScreenSize(); //获取屏幕的尺寸 int screenWidth = screenSize.width; //获取屏幕的宽 i

java Swing组件和事件处理

1.常见的容器 JComponent是 Container 的子类,中间容器必须添加到底层容器中才能够发挥作用, JPanel 面板 :使用jPanel 创建一个面板,再通过添加组件到该面板上面,JPanel默认的布局方式是FlowLayout JScrollPanel 滑动窗格:  滑动窗格只可以添加一个组件,可以将一个组件放到滑动窗格中,通过滚动条查看,JTextArea不带滚动条可以放到JScrollPanel中. JScorollPanel scroll=new JScorollPane

Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现

Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现 1. 建立悬浮窗口引用代码 1 1.1. 定义悬浮窗口,设置this主窗口引用,是为了在悬浮窗口中双击可缩小还还原主窗口.以及悬浮窗口右键菜单"显示主界面"中需要还原主窗 1 1.2. //设置主窗口关闭时,先关闭悬浮窗口.and系统托盘 1 1.3. 注入系统托盘图标,退出的时候儿也退出系统托盘 2 2. 悬浮窗口结构and重大的点 2 2.1. 要去掉标题栏: 2 2.2. Opa

Java Swing界面编程(3)---标签组件(JLabel)

package com.beyole.util; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import javax.swing.JFrame; import javax.swing.JLabel; public class test2 { public static void main(String[] args) { JFrame frame =

Java Swing界面编程(17)---单行文本输入组件:JTextField

package com.beyole.util; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class test15 { public static void main(String[] args) { JFrame frame = new JFrame("Crystal");// 实例化窗