Domanda

Sono bloccato con il modo di ridimensionare il terzo pulsante per diventare la stessa dimensione come gli altri due e posizionarlo sul fondo.

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);
    }
}
È stato utile?

Soluzione

Due suggerimenti:

1) mettere le cose incontrate nel blocco di inizializzazione istanza. Personalmente mi vengono i brividi ogni volta che vedo una chiamata a "questo ()".

{     this.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); }

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

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

2) Vorrei liberarmi di x, y, w, h costruttore ... personalmente ho una classe denominata WindowUtils che ha un metodo "posizione" che capisce le dimensioni dello schermo e quindi utilizza i valori passati per creare una finestra che è la dimensione relativa della schermata. Poi il codice che crea la finestra chiama così. Io preferisco avere il minor numero possibile di costruttori (molto spesso che è pari a zero o uno, ho quasi mai avuto due o più).

.

3) this.getContentPane () add (jb_inc); ora può essere scritta come add (jb_inc); - dal JDK 1.5 Penso

.

4) mai chiamare i metodi ignorabile (tutte le cose che avete questo. Prima) all'interno del costruttore. Se una sottoclasse dovesse ignorare "add" si poteva vedere le cose si rompono. Così si può chiamare super.add (), o fare il aggiunge in un altro metodo, o fare il vostro finale di classe.

Ora per rispondere alla tua domanda ...: -)

È necessario fare uso di LayoutManagers per ottenere quello che vuoi.

A seconda di ciò che si vuole probabilmente si desidera utilizzare un BorderLayout modo da poter ottenere il pulsante in basso.

Altri suggerimenti

Vi suggerisco di iniziare leggendo la sezione dal tutorial Swing on utilizzando gestori di layout il codice non funziona perché si sta tentando di aggiungere 3 componenti al "centro" della BorderLayout che non funziona. Scegliere un LayoutManager che meglio soddisfa le vostre esigenze.

Non v'è alcuna necessità di utilizzare il metodo delle setBounds (...) quando si utilizza un gestore di layout. Il lavoro del gestore di layout è posizionare i componenti in base alle regole del gestore di layout. La dimensione preferita di ciascun pulsante dovrebbe essere la stessa in quanto non si è aggiunto alcun testo per i pulsanti.

Inoltre, non v'è necessità di richiamare setVisible () sui bottoni, tutti i componenti Swing sono visibili per default, tranne i contenitori di livello superiore (JFrame, JDialog).

Dal momento che si sta impostando limiti su tutto, non hai bisogno di un LayoutManager a tutti. Impostare il LayoutManager a null, allora è possibile posizionare tutto da soli, come si è nel tuo esempio.

this.setLayoutManager(null)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top