利用java swing 制作gui画面_使用Swing组件在Java Swing中创建一个简单的GUI编辑器

这个博客展示了如何使用Java Swing构建一个简单的GUI编辑器。通过添加组件、处理鼠标事件来实现组件的移动和调整大小功能,提供了一个基础的GUI布局编辑的概念证明。
摘要由CSDN通过智能技术生成

我以为我应该记住那些古老的Swing日子,并且为此写一个概念证明会有一点乐趣.它支持在主面板上添加一个按钮,然后移动一些基本调整大小.

它只是一个概念证明,但它回答了你已经拥有的很多问题.我在那里添加了一些TODO,例如你将知道下一步该做什么.

请享用…

import java.awt.BorderLayout;

import java.awt.Cursor;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JToolBar;

public class UIBuilder {

private static final int NONE = -1;

private static final int BORDER = 3;

private JFrame frame = new JFrame("Builder");

private JToolBar toolbar = new JToolBar();

private JPanel main = new JPanel();

private int startX = NONE;

private int startY = NONE;

private int prevX = NONE;

private int prevY = NONE;

private boolean resize = false;

public UIBuilder() {

frame.setBounds(100, 100, 600, 450);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new BorderLayout());

frame.getContentPane().add(toolbar, BorderLayout.PAGE_START);

frame.getContentPane().add(main, BorderLayout.CENTER);

frame.setVisible(true);

buildToolbox();

buildMainPanel();

}

private void buildToolbox() {

JButton button = new JButton("Button");

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JButton btn = new JButton("Button");

addComponent(btn);

}

});

toolbar.add(button);

}

private void buildMainPanel() {

main.setLayout(null);

}

private void addComponent(JComponent comp) {

comp.setBounds(10, 10, 80, 24);

comp.addMouseListener(new MouseAdapter() {

public void mouseReleased(MouseEvent e) {

startX = NONE;

startY = NONE;

((JComponent) e.getSource()).setCursor(Cursor.getDefaultCursor());

}

public void mousePressed(MouseEvent e) {

startX = e.getX();

startY = e.getY();

}

});

comp.addMouseMotionListener(new MouseMotionAdapter() {

public void mouseMoved(MouseEvent e) {

JComponent source = (JComponent) e.getSource();

int x = e.getX();

int y = e.getY();

Rectangle bounds = source.getBounds();

resize = x < BORDER || y < BORDER || Math.abs(bounds.width - x) < BORDER || Math.abs(bounds.height - y) < BORDER;

if (resize) {

// TODO: there are a lot of resize cursors here, this is just of proof of concept

source.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));

} else {

source.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));

}

}

public void mouseDragged(MouseEvent e) {

int x = e.getX();

int y = e.getY();

if (startX != NONE && startY != NONE) {

JComponent source = (JComponent) e.getSource();

Rectangle bounds = source.getBounds();

int deltaX = x - startX;

int deltaY = y - startY;

if (resize) {

// TODO: handle all resize cases, left, right,...

source.setSize(Math.max(10, bounds.width + x - prevX), Math.max(10, bounds.height + y - prevY));

} else {

source.setLocation(bounds.x + deltaX, bounds.y + deltaY);

}

// TODO: make sure you don't resize it as much as it disappears

// TODO: make sure you don't move it outside the main panel

} else {

startX = x;

startY = y;

}

prevX = x;

prevY = y;

}

});

main.add(comp);

main.validate();

main.repaint();

}

public static void main(String[] args) {

new UIBuilder();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值