Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich erstelle eine GUI in die ich auf ein erweitertes JPanel ldynamisch JInternalFrames einfüge. In diesen sind ein JTextField und eine JList eingefügt. Nun füge ich Elemente in die JList im JInternalFrame hinzu. Leider werden vor und nach dem Einfügen keine ScrollBars angezeigt. Wie mache ich das am besten?
Anmerkung: Im JPanel benutze ich ein Null-Layout
Vielen Dank schon mal im Vorraus!
Java:
public final class clBox extends JInternalFrame
{
private JTextField JBoxName = new JTextField();
private JScrollPane JScrollPaneZugeordFzg = new JScrollPane();
private JList JzugeordneteFahrzeuge = new JList();
public clBox( Point objLocation )
{
initBox( objLocation );
}
public void initBox( Point objLocation )
{
JBoxName.setColumns( 16 );
JBoxName.setForeground( Color.BLUE );
JBoxName.setHorizontalAlignment( JTextField.CENTER );
JBoxName.setBorder( BorderFactory.createLineBorder( Color.BLACK, 1 ) );
JScrollPaneZugeordFzg.setViewportView( this.JzugeordneteFahrzeuge );
JScrollPaneZugeordFzg.setVisible( true );
JzugeordneteFahrzeuge.setTransferHandler( new ToTransferHandler( TransferHandler.COPY ) ) ;
JzugeordneteFahrzeuge.setDragEnabled( true );
JzugeordneteFahrzeuge.setDropMode( DropMode.INSERT );
JzugeordneteFahrzeuge.setModel( new DefaultListModel() );
this.setLayout( new FlowLayout( FlowLayout.CENTER, 0, 0 ) );
this.setBorder( BorderFactory.createLineBorder( Color.BLACK, 1 ) );
this.setVisible( true );
this.setFocusable( true );
this.setBounds( objLocation.x,
objLocation.y,
(int)minimaleBoxGroesse.getWidth(),
(int)minimaleBoxGroesse.getHeight() );
this.add( JBoxName );
this.add( JScrollPaneZugeordFzg );
}
Bei der Benamung bitte an den Code Conventions orientieren. Klassenamen beginnen mit einem Grossbuchstaben, Variablennamen klein schreiben und mit einem sprechenden Namen versehen.
Warum verwendest Du für Deinen InternalFrame ein FlowLayout und belässt nicht das BorderLayout?
Die JList wird angezeigt? Die JList enthält mehr Elemente als angezeigt werden?
Das interessiert mich nun auch, vor allem weil ich nun verwirrt bin, dass du Internalframes auf ein Panel legst? Ich dachte dafür wäre das Desktoppane da...
Ich habe hier ein Testbeispiel das funktioniert, also kann es schonmal nicht per se an den Internalframes liegen:
Java:
public final class IFTest {
public static JInternalFrame createSubFrame() {
final DefaultListModel<String> model = new DefaultListModel<>();
final JList<String> list = new JList<>(model);
final JTextField field = new JTextField("Eingabe", 16);
field.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addElement( field.getText() );
}
});
final JInternalFrame frame = new JInternalFrame("Intern");
frame.setLayout(new FlowLayout());
frame.add(field);
frame.add(new JScrollPane(list));
frame.pack();
frame.setLocation(10, 10);
frame.setVisible(true);
return frame;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JDesktopPane desk = new JDesktopPane();
desk.add( createSubFrame() );
final JFrame frame = new JFrame("App");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(desk);
frame.pack();
frame.setVisible(true);
}
});
}
}
Bei der Benamung bitte an den Code Conventions orientieren. Klassenamen beginnen mit einem Grossbuchstaben, Variablennamen klein schreiben und mit einem sprechenden Namen versehen.
Frag lieber nicht, diese Schreibweisen sind vom Auftraggeber gefordert..
Die Liste ist bei Initialisierung einer Box leer und wird mittels D&D aus einer zweiten Liste gefüllt. Das Hinzufügen funktioniert auch soweit. Allerdings erscheinen halt die ScrollBars nicht, obwohl der Eintrag größer ist als die Boxabmaße.
Das Box Layout könnte ich mit Sicherheit auch verwenden.
Ein DesktopPane habe ich bis jetzt noch nicht verwendet, danke für den Hinweis werde ich mir mal genauer anschauen.
Allerdings zeichne ich Verbindungen zwischen den Boxen. Deshalb habe ich bis jetzt mit dem erweiterten JPanel gearbeitet.