Domanda

Il mio problema attuale è che ho un JFrame con un GridLayout 2x2. E dentro una delle piazze, ho un JPanel che deve mostrare una griglia. Sto avendo una giornata campale con la libreria Java Swing ... dai un'occhiata

Image

Java si sta espandendo automaticamente ogni JLabel per adattarsi allo schermo. Voglio che siano solo quei quadrati blu (acqua) e il bordo nero e non quello spazio grigio. C'è un modo in cui posso semplicemente impostare la dimensione di quel JPanel in modo permanente in modo da non dover passare attraverso la modifica della dimensione di JFrame un milione di volte prima di ottenere la dimensione esatta in modo che lo spazio grigio scompaia?

Vorrei anche impostare la dimensione di quei pulsanti in modo che non siano così grandi ( BorderLayout viene utilizzato per i pulsanti e TextField)

È stato utile?

Soluzione

Se vuoi che le due scacchiere abbiano le stesse dimensioni, dovrai averle ognuna contenuta nel loro JPanel . Impostare ognuno di quei JPanel principali in modo da avere un tipo di layout di GridBagLayout . Impostare la dimensione preferita per ciascun componente a scacchiera e quindi aggiungerli ai rispettivi contenitori. GridBagLayout dovrebbe per impostazione predefinita posizionare ogni scheda al centro del genitore JPanel. Quindi, quando la finestra viene ridimensionata, l'area padre di JPanel diventerà più grande o più piccola, ma i componenti della scacchiera all'interno rimarranno delle stesse dimensioni.

In alternativa, puoi ridimensionare i quadratini blu alla giusta dimensione quando la finestra viene ridimensionata facendo in modo che ciascun quadratino di controllo sia un JPanel con un gestore di layout BorderLayout e aggiungendo il JLabel (con un colore di sfondo blu) nella posizione BorderLayout.CENTER .

Per quanto riguarda i tuoi pulsanti, prova qualcosa del genere:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

Infine, considera l'utilizzo di uno strumento di progettazione per l'interfaccia utente di Swing. Netbeans ha un eccellente UI designer integrato. Scarica Netbeans qui .

Altri suggerimenti

GridBagLayout è ciò che vuoi veramente usare. GridLayout imporrà le stesse dimensioni per ciascun componente nel layout, indipendentemente dalle limitazioni di dimensione che vengono applicate su di essi. GridBagLayout è molto più potente e molto più complicato. Studia su la pagina API per questo. Usando GridBagLayout , i componenti non riempiranno l'intero spazio della griglia se non li vuoi e possono anche rimanere le dimensioni che chiedi di essere. Per evitare che le dimensioni di un componente cambino, impostarei tutti e tre i vincoli di dimensione disponibili:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

Per i tuoi pulsanti, utilizzerei sicuramente un pannello interno come Bryan menziona. Puoi usare un GridLayout come suggerisce lui o un FlowLayout se non vuoi che tutti i pulsanti abbiano le stesse dimensioni. Aggiungi tutti i tuoi pulsanti al pannello interno anziché a quello principale.

Se puoi setResizeable (false) sul frame di livello superiore, puoi quindi impostare il tuo layout manager su null e hard code ogni posizione e dimensione tramite setBounds. È così che lo farei (dipende ovviamente dal ridimensionamento).

Ho avuto successo nel risolvere problemi come questi usando TableLayout che è un gestore di layout di terze parti. Dovrai scaricarlo e leggere il tutorial, ma la chiave sarebbe quella di impostare la giustificazione su CENTER quando aggiungi i JButton alle loro posizioni nel layout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top