| 发表于:2007-04-10 17:45:51 楼主 |
问题(1):在实现了拖放后,按钮的前景色好象会没掉. 变成一个凹块,只有鼠标在上面左键点击放开才能恢复原状. 试过了给按钮 repaint()还是不能解决.小生搞不出啥解决办法了. 问题(2):按扭都是在jpanel里,动态生成的. jpanel用了流布局,使其可以随窗口大小而自动排列.但是就不出现垂直滚动条.横的可以. 如果按扭一多,被挤压后成一排,那么没有滚动条下面的都点不到.影响可操作性. 附简单源代码: import java.awt.borderlayout; import java.awt.dimension; import java.awt.flowlayout; import java.awt.datatransfer.dataflavor; import java.awt.datatransfer.stringselection; import java.awt.datatransfer.transferable; import java.awt.dnd.dndconstants; import java.awt.dnd.draggestureevent; import java.awt.dnd.draggesturelistener; import java.awt.dnd.draggesturerecognizer; import java.awt.dnd.dragsource; import java.awt.dnd.dragsourcedragevent; import java.awt.dnd.dragsourcedropevent; import java.awt.dnd.dragsourceevent; import java.awt.dnd.dragsourcelistener; import java.awt.dnd.droptarget; import java.awt.dnd.droptargetdragevent; import java.awt.dnd.droptargetdropevent; import java.awt.dnd.droptargetevent; import java.awt.dnd.droptargetlistener; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jsplitpane; import javax.swing.jtextarea; public class test extends jframe implements dragsourcelistener,draggesturelistener{ private jsplitpane hsplitpane = new jsplitpane(); private flowlayout fo = new flowlayout(flowlayout.center, 10, 10); private dimension bdimension = new dimension(60, 40); private dimension tdimension = new dimension(300,100); private jpanel lpanel = new jpanel(fo); private jpanel rpanel = new jpanel(fo); private jpopupmenu panelpopup = new jpopupmenu(); private jpopupmenu buttonpopup = new jpopupmenu(); private jbutton choicedbutton; private int count=8; private dragsource ds; private stringselection transferable; public static void main(string args[]) { new test(); } public test() { super(); buildui(); hsplitpane.setdividerlocation(300); hsplitpane.setleftcomponent(lpanel); hsplitpane.setrightcomponent(rpanel); hsplitpane.setdoublebuffered(true); hsplitpane.setcontinuouslayout(true); this.setdefaultcloseoperation(jframe.exit_on_close); this.getcontentpane().add(hsplitpane, borderlayout.center); this.setsize(700, 400); this.setvisible(true); } public void buildui() { addlpanelbutton(20, " "); jtextarea textarea = new jtextarea( "drop items into this text area: "); textarea.setpreferredsize(tdimension); rpanel.add(new jscrollpane(textarea)); lpanel.setname( "左键 "); lpanel.add(panelpopup); lpanel.setminimumsize(new dimension(0, 0)); rpanel.setminimumsize(new dimension(0, 0)); } //在左边面板上添加按钮 private void addlpanelbutton(int btncount,string btnname) { jbutton[] buttons = new jbutton[btncount]; for (int i = 0; i < btncount; i++) { if(btncount==1){ buttons[i] = new jbutton(btnname); } else{ buttons[i] = new jbutton(string.valueof(i)); } buttons[i].setpreferredsize(bdimension); buttons[i].add(buttonpopup); buttons[i].setactioncommand( "button "); ds = new dragsource(); draggesturerecognizer dgr = ds.createdefaultdraggesturerecognizer(buttons[i], dndconstants.action_copy, this); lpanel.add(buttons[i]); lpanel.updateui(); } } //下面这几个方法是实现接口的 dragsourcelistener,draggesturelistener public void draggesturerecognized(draggestureevent dge) { system.out.println( "drag gesture recognized! "); jbutton button=(jbutton) dge.getcomponent(); string content=button.gettext(); if(content!=null){ transferable = new stringselection(content); ds.startdrag(dge, dragsource.defaultcopydrop, transferable, this); } } public void dragenter(dragsourcedragevent dsde) { system.out.println( "drag enter "); } public void dragexit(dragsourceevent dse) { system.out.println( "drag exit "); } public void dragover(dragsourcedragevent dsde) { system.out.println( "drag over "); } public void dragdropend(dragsourcedropevent dsde) { system.out.print( "drag drop end: "); if (dsde.getdropsuccess()) { system.out.println( "succeeded "); } else { system.out.println( "failed "); } } public void dropactionchanged(dragsourcedragevent dsde) { system.out.println( "drop action changed "); } } |
|
|
|
|