首先這種效果我沒(méi)有做過(guò),因?yàn)楝F(xiàn)在實(shí)在沒(méi)有人用swing寫(xiě)GUI客戶端了。
創(chuàng)新互聯(lián)從2013年開(kāi)始,先為武義等服務(wù)建站,武義等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為武義企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
讓我現(xiàn)在給你寫(xiě)個(gè)完整的代碼也么那么多時(shí)間》
首先分隔成三個(gè)窗體,用三個(gè)jpanel放到j(luò)frame中,然后仔細(xì)的設(shè)置窗體和jpanel的寬高和位置就能了,
至于拖動(dòng)變成豎的,你只需要在底下console的窗口的jpanel加上MouseListener,具體的可靠下面的代碼:
注意的是,當(dāng)?shù)紫碌腸onsole的位置變更,變成豎的了,其他的jpanel的位置你也需要進(jìn)行更新調(diào)整
myFrame.addMouseListener(new?MouseAdapter()?{
//?按下(mousePressed
//?不是點(diǎn)擊,而是鼠標(biāo)被按下沒(méi)有抬起)
public?void?mousePressed(MouseEvent?e)?{?
//?當(dāng)鼠標(biāo)按下的時(shí)候獲得窗口當(dāng)前的位置
origin.x?=?e.getX();?
origin.y?=?e.getY();
}
});
myFrame.addMouseMotionListener(new?MouseMotionAdapter()?{
//?拖動(dòng)(mouseDragged
//?指的不是鼠標(biāo)在窗口中移動(dòng),而是用鼠標(biāo)拖動(dòng))
public?void?mouseDragged(MouseEvent?e)?{????????????????????????????????????????????????????????
//?當(dāng)鼠標(biāo)拖動(dòng)時(shí)獲取窗口當(dāng)前位置
Point?p?=?myFrame.getLocation();?
//?設(shè)置窗口的位置
//?窗口當(dāng)前的位置?+?鼠標(biāo)當(dāng)前在窗口的位置?-?鼠標(biāo)按下的時(shí)候在窗口的位置
myFrame.setLocation(p.x?+?e.getX()?-?origin.x,?p.y?+?e.getY()
-?origin.y);
}
});
把圖片或文件發(fā)出去不是難事,主要是拖動(dòng)作用的實(shí)現(xiàn)。
以下代碼實(shí)現(xiàn)了當(dāng)拖動(dòng)文件到Panel上時(shí)能獲得文件對(duì)象,其余的你實(shí)現(xiàn)發(fā)送就可以了。
import java.awt.BorderLayout;
import java.awt.datatransfer.*;
import java.io.*;
import java.util.List;
import javax.swing.*;
public class TestFrame extends javax.swing.JFrame {
private JPanel panel;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TestFrame inst = new TestFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public TestFrame() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setTransferHandler(new TransferHandler() {
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
return true;
}
public boolean importData(JComponent comp, Transferable t) {
try {
if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
List files;
files = (List) t
.getTransferData(DataFlavor.javaFileListFlavor);
for (int i = 0; i files.size(); i++) {
File f = (File) files.get(i);
System.out.println(f.getAbsolutePath());
}
return true;
}
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return super.importData(comp, t);
}
});
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
}
你點(diǎn)擊右鍵后拖動(dòng)鼠標(biāo),然后拖動(dòng)到一個(gè)位置,點(diǎn)擊左鍵,獲取到當(dāng)前鼠標(biāo)的位置,然后重新設(shè)置下需要移動(dòng)的那個(gè)JLabel的坐標(biāo)就可以了。
拖曳(Drag and Drop)在Swing中有支持,直接調(diào)用setDragEnabled就可以實(shí)現(xiàn)“可拖動(dòng)”效果。
常用的控件中都有:setDragEnabled、setDropMode、setDropTarget。
以上回答你滿意么?
少俠,這就需要你給要拖的數(shù)據(jù)添加監(jiān)聽(tīng)了。通過(guò)監(jiān)聽(tīng)獲取當(dāng)前拖的數(shù)據(jù),在獲取目標(biāo)位置。具體操作你還是去看一下監(jiān)聽(tīng)的API吧,看你需要的什么監(jiān)聽(tīng)。