Frage

Ich bin fest, mit wie die dritte Schaltfläche, um die Größe die gleiche Größe wie die beiden anderen wurde und legen Sie es auf den Boden.

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
War es hilfreich?

Lösung

Zwei Vorschläge:

1) setzen gemeinsame Dinge in die Instanz Initialisierungsbaustein. Persönlich Schauder ich, wenn ich einen Anruf, um zu sehen „diese ()“.

{     this.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); }

ControlFrame () {     Super ( "Control Frame"); }

ControlFrame (int x, y int, int w, int h) {     Super ( "Control Frame");     ... }

2) Ich würde loszuwerden, die x, y, w, h Konstruktor ... persönlich habe ich eine Klasse WindowUtils genannt, die eine „Position“ Methode hat, dass die Zahlen aus der Bildschirmgröße und dann die Werte verwendet, übergeben zu erzeugt ein Fenster, das die relative Größe des Bildschirms ist. Dann wird der Code, der das Fenster erstellt ruft das. Ich ziehe es so wenige Konstrukteure wie möglich haben (sehr oft die Null oder Eins ist, habe ich so gut wie nie zwei oder mehr).

3) this.getContentPane () hinzufügen (jb_inc). kann nun als add (jb_inc) geschrieben werden; - seit 1.5 JDK denke ich,

.

4) nie überschreibbar Methoden aufrufen (alle Dinge, die Sie diesem. Vorher) innerhalb des Konstruktors. Wenn eine Unterklasse außer Kraft zu setzen war „add“ könnte man die Dinge Pause sehen. So können Sie call () super.add, oder tun in einem anderen Verfahren der hinzufügt, oder die Klasse endgültig machen.

Jetzt ist Ihre Frage zu beantworten ...: -)

Sie müssen den Einsatz von LayoutManagers machen zu bekommen, was Sie wollen.

Je nachdem, was Sie wollen, Sie wollten wahrscheinlich einen Border verwenden, so dass Sie die Taste auf der Unterseite erhalten.

Andere Tipps

Ich schlage vor, Sie starten, indem Sie den Ausschnitt aus den Swing-Tutorial zu lesen auf Mit Layout-Manager Ihr Code wird nicht funktionieren, weil Sie drei Komponenten versuchen, das „Zentrum“ hinzuzufügen, der Border, die nicht arbeiten. Wählen Sie einen Layoutmanager, dass besser Ihren Bedürfnissen entspricht.

Es gibt keine Notwendigkeit, die setBounds zu verwenden (...) Methode, wenn Sie einen Layout-Manager. Die Aufgabe des Layout-Managers ist es, die auf den Regeln der Layout-Manager basierten Komponenten positionieren. Die bevorzugte Größe der einzelnen Tasten soll die gleiche sein, da Sie keinen Text zu den Schaltflächen hinzugefügt haben.

Auch ist es nicht brauchen, um invoke setVisible () auf den Tasten, alle Swing-Komponenten sind standardmäßig sichtbar, mit Ausnahme der Top-Level-Container (JFrame, JDialog).

Da Sie Einstellung Grenzen für alles, Sie brauchen keinen Layoutmanager überhaupt. Legen Sie Ihre Layoutmanager auf null, dann können Sie alles selbst positionieren, wie Sie in Ihrem Beispiel sind.

this.setLayoutManager(null)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top