| 

.NET C# Java Javascript Exception

2
Ich bin von Visual Basic 6 auf Java umgestiegen. Ich möchte in einer Java-Anwendung einige Swing-Controls zur Laufzeit auf Quelltextebene in unterschiedliche Container (i.d.Regel Rahmen des Typs Jpanel) bewegen. Unter Visual Basic 6 war dies möglich, indem der Container-Eigenschaft eines Steuerelementes der neue Zielcontainer direkt zugewiesen wurde.

control.container = ZielContainer


Wie mache ich sowas unter Java?
News:
26.06.2012
1 Antwort
0
Mit einem
panel0.remove(movedComponent);
panel1.add(movedComponent);

sollte das wichtigste schon erledigt sein. Damit diese Änderung auch sichtbar wird (also um das Layout zu aktualisieren und neu zu zeichnen) muss man noch
panel0.validate();
panel0.repaint();
panel1.validate();
panel1.repaint();

aufrufen. Alternativ dazu kann man den Aufruf von validate()/repaint() auch auf einer höheren Component machen, die sowohl panel0 als auch panel1 enthält.

Noch ein KSKB:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;


public class MoveComponentTest
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createMainPanel());
frame.pack();
frame.setVisible(true);
}

private static JPanel createMainPanel()
{
JPanel mainPanel = new JPanel();

final JPanel panel0 = new JPanel();
panel0.setBackground(Color.RED);

final JComponent movedComponent =
new JTextField("Ich bin sehr bewegt!");
panel0.add(movedComponent);

final JPanel panel1 = new JPanel();
panel1.setBackground(Color.GREEN);


final JToggleButton button = new JToggleButton("Move");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (button.isSelected())
{
panel0.remove(movedComponent);
panel1.add(movedComponent);
}
else
{
panel1.remove(movedComponent);
panel0.add(movedComponent);
}
panel0.validate();
panel0.repaint();
panel1.validate();
panel1.repaint();
}
});

mainPanel.add(button);
JPanel p = new JPanel(new GridLayout(2,1));
p.add(panel0);
p.add(panel1);
mainPanel.add(p);

return mainPanel;
}
}


EDIT: Ein kleiner Nachrag: Das
alterContainer.remove(component);

ist an sich nicht nötig, weil das bei
neuerContainer.add(component);

intern automatisch gemacht wird, aber der Klarheit und Nachvollziehbarkeit halber würde ich es wenn möglich hinschreiben.
28.06.2012
Marco13 286 1 2
Marco13 286 1 2

Stelle deine Java-Frage jetzt!