LayoutManager pagelayout - Example läuft einfach nicht !

osix

Bekanntes Mitglied
Hallo Gemeinde,

warum läuft dieses Beispiel von der PageLayoutManger Seite einfach nicht.
jaja, ich weiß schon Ambiguity bedeutet Mehrdeutigkeit.
aber was soll ich noch machen, ich hab genau wie gefordert im Beispiel
import static pagelayout.EasyCell.* eingefügt.

http://pagelayout.sourceforge.net/Easy.html

Ich verwende Netbeans 8.2 und ich meine vor Jahren, als ich noch mt Eclipse unterwegs war hat das Beispiel einfach so funktioniert !

und jetzt kommt dieser Fehler:
pagelayoutmanagerfehler.jpg

Java:
package pagelayoutfirstdemo;

import java.awt.Container;
import javax.swing.*;
import pagelayout.*;

import static pagelayout.EasyCell.*;
import static pagelayout.EasyCell.center;
import static pagelayout.EasyCell.none;


public class PageLayoutFirstDemo {

 
    public static void main(String[] args) {
   
        JFrame frame = new JFrame();
        Container container = frame.getContentPane();
        JTextField text = new JTextField("Text field", 15);
        JLabel label = new JLabel("Label: ");
        JButton ok = new JButton("OK");
        JButton cancel = new JButton("Cancel");
           
        Column toplevel= new Column();
   
        topLevel = column(pagelayout.EasyCell.row(none, center, label, text),row(center, none, ok, cancel));
        // Create the layout
        topLevel.createLayout(container);

        frame.pack();
        frame.show();
    }

}
 
Zuletzt bearbeitet von einem Moderator:
Ja die Type inference hat sich stark weiterentwickelt und kann mit:
Java:
Column topLevel = column(row(none, center, new Object[]{label, text}), row(center, none, new Object[]{ok, cancel}));
behoben werden.
 
Erstmal DANKE ! Ja, so tut es.
Kannst du bitte kurz erklären, warum man das jetzt so machen muß ? Man erklärt ja das nachfolgende zu einem Objekt, sehe ich das richtig ? Warum muß man das jetzt so machen, und ist es richtig, daß das erst seit einer bestimmten Java Version nötig ist ? Das erklärt auch warum der gleiche Code "früher" mit Eclipse lief....
 
Grundsätzlich hat es nichts mit der IDE (Eclipse) zu tun, sondern mit der Java Version. Der Compiler ist immer Smarter geworden und kann Dinge "selbst" herausfinden und herleiten. Das macht es aber ein bisschen pendanter bei diversen Methoden, so wie deiner. Deine Methoden sind überladen und haben noch dazu varags am Ende. Das macht es schwerer, bis unmöglich, die richtige Methode rauszufinden. Darum explizit die Methode bedienen, die du haben möchtest - was auch in meiner Lösung gemacht wurde.
 
Grundsätzlich hat es nichts mit der IDE (Eclipse) zu tun, sondern mit der Java Version. Der Compiler ist immer Smarter geworden und kann Dinge "selbst" herausfinden und herleiten.
Wobei der Eclipse-Compiler da noch mal anders ist als der "normale" Java-Compiler, das kann durchaus auch zu unterschieden führen (wenn auch nicht in diesem Fall) 😉
 
Möchte das übersichtlich haben.

Warum geht das hier nicht ?
Java:
Object A= new Object[]{label, text};
Object B = new Object[]{ok, cancel};

Column topLevel = column(row(none, center, A), row(center, none,B));
 
Zuletzt bearbeitet von einem Moderator:
Die Methode erwartet eine Object-array und man kann das auch mit dem einfacheren Array initializer machen:
Java:
Object[] A = {label, text};
Object[] B = {ok, cancel};
Column topLevel = column(row(none, center, A), row(center, none, B));
 

Neue Themen


Zurück
Oben