在Java中拖动组件的Swing库

我试图创建一种图形编辑器,允许用户创建美式足球比赛的图形描述。要做到这一点,用户应该能够做到以下几点:在Java中拖动组件的Swing库

1)单击并用鼠标左键移动图片点击

2)改变图像(圆形,方形和线)

3)重置所有物体的尺寸

理想情况下,我希望能够添加可调整的颜色和线条粗细,但这是很遥远的道路。

现在,我所能做的就是创建JButton,点击时可以循环显示图像。我想我想将其更改为JComboBox,以便用户可以直接转到正确的图像。这里是我的类名为:FBButton

import javax.swing.*; 

import java.awt.event.*;

@SuppressWarnings("serial")

public class FBButton extends JButton implements ActionListener {

ImageIcon SN, SL, SR, SC, CN, CL, CR, CC, IN;

byte value = 0;

FBMouseListener listener;

public FBButton() {

listener = new FBMouseListener();

SN = new ImageIcon(this.getClass().getResource("square_null.png"));

SL = new ImageIcon(this.getClass().getResource("square_left.png"));

SR = new ImageIcon(this.getClass().getResource("square_right.png"));

SC = new ImageIcon(this.getClass().getResource("square_line.png"));

CN = new ImageIcon(this.getClass().getResource("circle_null.png"));

CL = new ImageIcon(this.getClass().getResource("circle_left.png"));

CR = new ImageIcon(this.getClass().getResource("circle_right.png"));

CC = new ImageIcon(this.getClass().getResource("circle_line.png"));

IN = new ImageIcon(this.getClass().getResource("invisible.png"));

addActionListener(this);

}

public void actionPerformed(ActionEvent e) {

value++;

value %= 9;

if (value == 1) {

setIcon(SN);

} else if (value == 2) {

setIcon(SL);

} else if (value == 3) {

setIcon(SR);

} else if (value == 4) {

setIcon(SC);

} else if (value == 5) {

setIcon(CN);

} else if (value == 6) {

setIcon(CL);

} else if (value == 7) {

setIcon(CR);

} else if (value == 8) {

setIcon(CC);

} else {

setIcon(IN);

}

}

}

这些按钮的作用和图像都可以找到。这里是我的类FBPlayerFrame

package swing; 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class FBPlayerFrame extends JFrame {

JPanel p = new JPanel();

FBButton buttons[] = new FBButton[22];

String choices[] = { "Hallo", "Bonjour", "Conichuwa" };

JComboBox boxes[];

JComboBox here = new JComboBox(choices);

FBComboBox vince;

Dimension dim = new Dimension(52, 52);

public static void main(String[] args) {

new FBPlayerFrame();

}

public FBPlayerFrame() {

super("Football Start");

setSize(400, 400);

setResizable(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

p.setLayout(null);

for (int i = 0; i < 4; i++) {

buttons[i] = new FBButton();

buttons[i].setPreferredSize(dim);

buttons[i].setLocation(20, 40 + 60 * i);

p.add(buttons[i]);

}

add(p);

setVisible(true);

}

}

在保持特定的精神代码,我所寻求的首先是右键单击并拖动Jbutton将,或JComboBoxes,整个框架的能力。如果按钮的坐标可以在某个时候保存,那么以后也会有所帮助,但现在这不是必要的。

我已经搜索了StackOverflow和youtube的类似问题,但有一个具有挑战性的时间找到一些具体回答我的问题。

UPDATE:这里是我的FBMouseListener

代码

package swing; 

import java.awt.Component;

import java.awt.Point;

import java.awt.event.*;

import javax.swing.event.MouseInputAdapter;

public class FBMouseListener extends MouseInputAdapter {

Point location;

MouseEvent pressed;

public void mousePressed(MouseEvent me) {

pressed = me;

System.out.println("Found me");

}

public void mouseDragged(MouseEvent me) {

Component component = me.getComponent();

location = component.getLocation(location);

int x = location.x - pressed.getX() + me.getX();

int y = location.y - pressed.getY() + me.getY();

System.out.println("(" + x + ", " + y + ")");

component.setLocation(x, y);

}

}

回答:

用于拖动组件的基本代码是:

public class DragListener extends MouseInputAdapter 

{

Point location;

MouseEvent pressed;

public void mousePressed(MouseEvent me)

{

pressed = me;

}

public void mouseDragged(MouseEvent me)

{

Component component = me.getComponent();

location = component.getLocation(location);

int x = location.x - pressed.getX() + me.getX();

int y = location.y - pressed.getY() + me.getY();

component.setLocation(x, y);

}

}

创建类的一个实例,然后将其添加到您希望拖动的任何组件。

您还可以查看Component Mover课程。它允许你拖动桌面上的窗口或面板上的组件。它提供了一些更多的拖动功能。

编辑:

这需要我几行代码来测试这个解决方案:

JButton button = new JButton("hello"); 

button.setSize(button.getPreferredSize());

DragListener drag = new DragListener();

button.addMouseListener(drag);

button.addMouseMotionListener(drag);

JPanel panel = new JPanel(null);

panel.add(button);

JFrame frame = new JFrame();

frame.add(panel);

frame.setSize(400, 400);

frame.setVisible(true);

把上面的代码在main()方法,你有简单的代码进行测试。

以上是 在Java中拖动组件的Swing库 的全部内容, 来源链接: utcz.com/qa/264000.html

回到顶部