27. december 2003 - 12:37Der er
3 kommentarer og 1 løsning
Hvordan virker GridBags?
jeg har noget svært ved at rumme dokumentationen for GridBagLayouts og GridBagConstraints, jeg vil gerne have noget der virker ligesom html tables, altså fint alignede kolonner, men det bliver hæsligt ad h.. til :( jeg har en en bunke objekter der hver leverer en række til et overordnet objekts gui, det ser lige nu sådan her ud:
ServicePanel = new JPanel(); ServiceToggle = new JButton("Toggle"); ServiceTitle = new JLabel(this.FriendlyName); ServiceStatus = new JLabel(this.getStatusMessage());
gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.insets = new Insets(0, 0, 0, 0);
GridBagLayout ServiceLayout = new GridBagLayout();
GridBagLayout er lidt tuff at sætte sig ind i, men også en af de bedste - synes jeg
Men jeg skal prøve at gøre det forståeligt
Første kolonne og første række starter med nr. 0,0
Hvis du lægger en komponent i gridx/gridy (0,0) og sætter gridwidth = 2, så dækker komponenten altså kolonne 0 og 1, næste komponent skal derfor placeres i gridx/gridy (2,0)
En kolonne/række er nøjagtig så bred/høj som det areal den STØRSTE komponent optager, d.v.s komponenter som er mindre fylder ikke hele cellen ud med mindre du specifikt beder om det.
Du kan ligeledes vælge hvor i cellen komponenter skal placere sig (nord, syd øst, vest, center, nordøst etc.)
Her har du 3 JPanels, indeholdene det samme antal JButtons, JButtton2 har samme størrelse i alle paneler, de sætter jeg bare til at opføre sig forskelligt, med ligeså forskelligt udseende tilfølge.
Eventuelle spørgsmål, så er jeg formentlig klar senere på aftenen, pt. slukkes pc'en.
import java.awt.*; import javax.swing.*;
public class Test extends javax.swing.JFrame {
public Test() { initComponents(); }
private void initComponents() { panelA = new Panel1(); panelB = new Panel2(); panelC = new Panel3(); panelA.setBorder(new javax.swing.border.EtchedBorder()); panelB.setBorder(new javax.swing.border.EtchedBorder()); panelC.setBorder(new javax.swing.border.EtchedBorder());
public static void main(String args[]) { new Test().show(); }
Panel1 panelA; Panel2 panelB; Panel3 panelC; }
class Panel1 extends JPanel { public Panel1() { jButton1 = new JButton(); jButton2 = new JButton(); jButton3 = new JButton(); jButton4 = new JButton(); GridBagConstraints gbc = new GridBagConstraints();
class Panel2 extends JPanel { public Panel2() { jButton1 = new JButton(); jButton2 = new JButton(); jButton3 = new JButton(); jButton4 = new JButton(); GridBagConstraints gbc = new GridBagConstraints();
class Panel3 extends JPanel { public Panel3() { jButton1 = new JButton(); jButton2 = new JButton(); jButton3 = new JButton(); jButton4 = new JButton(); GridBagConstraints gbc = new GridBagConstraints();
Kom lige til at tænke på GridLayout - måske mere din stil !
public class GridLayout extends javax.swing.JFrame {
public GridLayout() { initComponents(); }
private void initComponents() { jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); jButton8 = new javax.swing.JButton(); jButton9 = new javax.swing.JButton();
GridLayout gør præcis det jeg ledte efter - 1000 tak :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.