DnD in modalem Dialog

  • Themenstarter Themenstarter RobertM
  • Beginndatum Beginndatum
R

RobertM

Gast
Hallo zusammen,

hoffe es kann mir hier jemand weiterhelfen. Ich verwende einen Transferhandler (siehe Code) um Buttons in einem Panel mittels DnD zu verschieben. Das funktioniert auch ganz gut im Hauptfenster (JFrame) meines Programme. Sobald ich das ganze aber in einem modalen JDialog verwende klappt es nicht mehr. Das MousePressed Event wird zwar noch abgefangen und abgearbeitet aber es tut sich nichts. Bin für jede Idee dankbar.

BG
Robert

Java:
public class TouchButton extends JButton {
...

	String s_ID =  "-1";
	
	
	public String getS_ID() {
		return s_ID;
	}

	
	//Drop und Klick Event Einsprung!!!!!
	public void setS_ID(String DnD_source_ID) {
		if (Integer.valueOf(DnD_source_ID)!=data.ID)//Drop event
		{	parentPanel.parentWindow.config.SQL_commands.buttons.move_btn(Integer.valueOf(DnD_source_ID), parentPanel.getVor_ID(), data.Position);	
			parentPanel.button_move();
		}
		else//Klick Event
		{	parentPanel.add_edit_button(this.data, this);
		}
	}

....


	public TouchButton(TouchButtonPanel btn_parentWindow, SQLCommands.buttonData btn_data, int btn_font_size)
	{	parentPanel = btn_parentWindow;
		
		set_parameters(btn_data);
		this.setTransferHandler(new TransferHandler("s_ID"));
		this.addMouseListener(new DragMouseAdapter());
		
		
		if (btn_font_size > 0 && btn_font_size < 6)
		{	font_size = btn_font_size;
		}
		
	}

.....


	private class DragMouseAdapter extends MouseAdapter {
	    public void mousePressed(MouseEvent e) {
	    	if (parentPanel.parentWindow.is_in_config_mode())
	    	{ 	if (e.getSource() instanceof TouchButton)
	    		{	JComponent c = (JComponent) e.getSource();
      				TransferHandler handler = c.getTransferHandler();
      				handler.exportAsDrag(c, e, TransferHandler.COPY);
	    		}
	    	}   
	    }
	}	
}
 
Ohne den Code der anderen Klassen(Frame, Dialog) schwer zu sagen, hast du im Dialog vielleicht das DropTarget vergessen/falsch eingesetzt?
 
Hallo,

hier der Code des Dialogs, wozu DropTaget im Dialog, es sollen ja nur die Knöpfe inerhalb des Panels dialog verschoben werden, sobald ich den Dialog nicht modal mache (super(frame, false) funktioniert das Verschieben auch ohne Probleme. Schaut so aus als würde ein modaler Dialog den Swing Drag and Drop Support blockieren:

Java:
public class TouchButton_SubMenu extends JDialog{
	Font schrift = new Font("",Font.BOLD,40); 
	JLabel oben = new JLabel("  "), unten = new JLabel("  "),
		rechts = new JLabel("  "), links = new JLabel("  ");
	JButton Cancel = new JButton("Abrrechen");
	private JPanel dialog = new JPanel();
	private TouchButtonPanel buttons;
	private int max_col_count = 1; 
	int line_space =20;
	GridLayout Layout;
	AppWindow parentWindow;
	
	public TouchButton_SubMenu(AppWindow frame, Font menu_font)
	{	super(frame, true);
		parentWindow = frame;
				
		schrift = menu_font;
		buttons = new  TouchButtonPanel(0, "", frame, menu_font);
		
		dialog.setLayout(new BorderLayout(30,30));
		dialog.setBackground(Color.BLUE);
		
		dialog.add("North", oben);
		oben.setHorizontalAlignment(JLabel.CENTER);
		oben.setFont(schrift);
		dialog.add("South", unten);
		dialog.add("East", rechts);
		dialog.add("West", links);
		

		Layout = new GridLayout(0,1);
		buttons.setLayout(Layout);
		
		JScrollPane scroll = new JScrollPane(buttons);

		scroll.getVerticalScrollBar().setPreferredSize(new Dimension(50, 5000));
		scroll.getHorizontalScrollBar().setPreferredSize(new Dimension(5000, 50));
		
		dialog.add("Center",scroll);
		dialog.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.DARK_GRAY));
		
		setVisible(false);
		this.getContentPane().add(dialog);
		setUndecorated(true);
	}
	
	public void activate(SQLCommands.buttonData data, boolean in_config_mode)
	{	ArrayList<SQLCommands.buttonData> subbuttons = parentWindow.config.SQL_commands.buttons.getButtonList(data.ID);
		
		
		int verh = 1;
		double d_verh = subbuttons.size();
	
		d_verh= Math.sqrt(d_verh);
		verh = (int) d_verh;
	
		if (d_verh - (double)verh > 0)
		{ verh = verh + 1; }
		Layout.setColumns(verh);
		
		dialog.setBackground(new Color(data.Farbe));
		buttons.removeAll();
		buttons.setVor_ID(data.ID);
		
		for(int i=0;i<subbuttons.size();i++)
		{	TouchButton btn = new TouchButton(buttons, subbuttons.get(i), 1);
			btn.addActionListener(new ActionListener(){

				@Override
				public void actionPerformed(ActionEvent e) {
					if (!parentWindow.is_in_config_mode())
					{	setVisible(false);
						parentWindow.button_clicked((TouchButton) e.getSource());
					}
				}
				
			});
			buttons.add(btn);
		}
		
		oben.setText(data.Name);
	

		this.pack();
		setLocationRelativeTo(null);
	

		this.setVisible(true);
	}


	
}


BG
Robert
 

Zurück
Oben