Avatar billede backupmand Nybegynder
06. januar 2004 - 14:33 Der er 10 kommentarer og
1 løsning

Hvilken LayoutManager?

Jeg har lavet en "custom" komponent, som udvider JPanel og
på denne komponent findes et antal JCheckBoxes og et antal
JLabels .. der er altid lige mange antal checkboxes og
labels ....

Det store problem i den måde komponenterne vises på, skyldes
højst sandynligt mit valg og min brug af LayoutManager.

Jeg bruger i øjeblikket en GridLayout();

this.setLayout(new GridLayout(numrows,8,2,2));

Med antal rækker bestemt af indholdet af numrows (selvfølgelig
det antal af checkboxes/labels jeg har i pågældende situation).

Min custom komponent "CustomCheckBoxClass" befinder sig i et
JScrollPane, som er placeret på min "main" screen, som er
et andet panel.

Jeg vil gerne have at min JCheckbox skal være en bestemt størrelse
hver gang og ikke skifte bredde, længde mv .... men som det ser ud
i øjeblikket, er dette ikke tilfældet ... desværre ... så jeg er
i tvivl om hvilken LayoutManager jeg skal bruge, eller kunne
jeg bare bruge setBounds ??? (det er måske mere besværligt).

Håber på lidt hjælp .. her er klassen:

/**
  * A custom class that renders a checkbox and a label for choosing alternative compositions
  * of meals.
  *
  *
  */

    class CustomCheckBoxClass extends JPanel implements MouseListener, ActionListener {
   
    private JCheckBox manyboxes[];
    private JLabel labels[];
    private Vector row2data;
    private int selectedIndex=0;
    private Boolean boxIsSelected;
     
    CustomCheckBoxClass(Vector r2){
        this.row2data=r2;       
        int numrows=r2.size();
        this.setSize(150,300);
        this.setLayout(new GridLayout(numrows,8,2,2));       
        //this.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER));
        manyboxes=new JCheckBox[row2data.size()];
        labels=new JLabel[row2data.size()];
       
        for (int i=0;i<row2data.size();i++){
            manyboxes[i]=new JCheckBox();
            manyboxes[i].addActionListener(this);
            labels[i]=new JLabel((row2data.get(i)).toString());
            labels[i].addMouseListener(this);
            add(manyboxes[i]);
            add(labels[i]);
            manyboxes[i].setSelected(true);
            //manyboxes[i].setPreferredSize(new Dimension(1,1));
            manyboxes[i].setBackground(Color.yellow);
        }     
  }
   
    private void addBoxes(java.awt.event.ActionEvent evt)
    {
    manyboxes=new JCheckBox[row2data.size()];
    nowAddBoxes();   
    }       
   
    public void nowAddBoxes()
    {
    java.awt.Component[] comp = this.getComponents();   
   
    for(int i=0;i<comp.length;i++){
            this.remove(comp[i]);
        }
    for(int i=0;i<manyboxes.length;i++){
            manyboxes[i]=new JCheckBox();
            this.add(manyboxes[i]);
            manyboxes[i].addMouseListener(this);
        }
        this.revalidate();
        this.repaint();       
    }
       
    public void mouseClicked(MouseEvent me)
    {
    String uden="uden ";
    String ekstra="ekstra ";
     
    boolean there=false;
   
        if (me.getClickCount()==2)
          {         
             
                  Object source=(Object)me.getComponent();   
            System.out.println("source ="+source.toString());
            int contentStartIndex=(me.toString()).indexOf("text=");
            int contentEndIndex=(me.toString()).indexOf(",verticalAlignment");
            String theValue=(me.toString()).substring(contentStartIndex+5,contentEndIndex);   
            System.out.println("the value ="+theValue);
            System.out.println("selectedIndex ="+selectedIndex);
            boolean checkBoxCheckedValue;
            if (boxIsSelected==null)
            {
                checkBoxCheckedValue=true;
            }
            else {
                checkBoxCheckedValue=boxIsSelected.booleanValue();
            }   
                       
                                          String udenEkstraValue;
                                if (checkBoxCheckedValue==true) {
                                    udenEkstraValue="uden "+theValue;   
                                }
                                else {
                                    udenEkstraValue="ekstra "+theValue;   
                                }
                               
                                System.out.println("** udenEkstraValue ="+udenEkstraValue);             
                                System.out.println("** getRowCount() ="+billtableModel.getRowCount());   
                               
                                for (int i=0;i<billtableModel.getRowCount();i++) {
                                         
                                          System.out.println("there value ="+there);
                                         
                                          if (udenEkstraValue.equals(billtableModel.getValueAt(i,1)))                                
                                        {                                             
                                            there=true;
                                           
                                              System.out.println("checkBoxCheckedValue ="+checkBoxCheckedValue);
                                              System.out.println(" IT's THERE ALREADY");
                                              String withX=(String)(billtableModel.getValueAt(i,0)); // the value with X
                                  System.out.println("withX = "+withX);
                                  String withOutX=withX.substring(0,withX.indexOf("X")-1);
                                  System.out.println("withOutX = "+withOutX);
                                  String orderNo=withX.substring(withX.indexOf("X")+1,withX.length());
                                  System.out.println("orderNo = "+orderNo);
                                  Integer amountOrdered=new Integer(withOutX.trim());
                                  int IntAmountOrdered=amountOrdered.intValue();
                                  System.out.println("IntAmountOrdered = "+IntAmountOrdered);                                                                             
                                  int extraAmountAdded=IntAmountOrdered+1;
                                  System.out.println("extraAmountAdded = "+extraAmountAdded);
                                  String valueToSet=extraAmountAdded+" X"+orderNo;
                                  System.out.println("valueToSet = "+valueToSet);
                                  billtableModel.setValueAt(valueToSet,i,0);//setValueAt(Object value, int row, int column) {
                                      if (checkBoxCheckedValue==false) // an extra amount must be added to the amount
                                          {
                                          billtableModel.setValueAt(new Double(5.0),i,2);   
                                          pris+=5.0;
                                          }                           
                                  totalresultat.setText(pris+" kr");                             
                                            }   
                                        } // for                                       
                                          if (there==false) {
                                            System.out.println(" **--** checkBoxCheckedValue ="+checkBoxCheckedValue);
                                        System.out.println(" IT*S NOT THERE !!");    
                                        billtableModel.addTableElement(new TableElement("1 X", udenEkstraValue, new Double(0.0)));         
                                          if (checkBoxCheckedValue==false) // an extra amount must be added to the amount
                                          {
                                          billtableModel.setValueAt(new Double(5.0),billtableModel.getRowCount()-1,2);   
                                          pris+=5.0;
                                          }       
                                        totalresultat.setText(pris+" kr");                             
                                        }                        
                                             
          }  // if (me. ...     
    }// mouseClicked
     
    public void mousePressed(MouseEvent me){}
    public void mouseReleased(MouseEvent me){}
    public void mouseExited(MouseEvent me)
    {
    me.getComponent().setForeground(Color.black);           
    me.getComponent().setFont(ass.normalFont());
    }
   
    public void mouseEntered(MouseEvent me)
    {   
    me.getComponent().setForeground(Color.yellow);       
    me.getComponent().setFont(ass.customFont());
    }
   
    public void actionPerformed(ActionEvent ae) {
   
    Object source=(Object)ae.getSource();
     
    for (int i=0;i<manyboxes.length;i++) {
        if (source==manyboxes[i])
        {
        selectedIndex=i;
        System.out.println("manyboxes[i].isSelected "+manyboxes[i].isSelected());
        boxIsSelected=new Boolean(manyboxes[i].isSelected());   
        System.out.println("1st time boxIsSelected.booleanValue() ="+boxIsSelected.booleanValue()); 
        }
    }     
    }   
}
Avatar billede mikkelbm Nybegynder
06. januar 2004 - 14:54 #1
Jeg mener at GridLayout altid vil lave størrelsen på rækker og kolonner lige så store som det største element i den.

Måske du skal over og kigge lidt på GridBagLayout

http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html
Avatar billede backupmand Nybegynder
06. januar 2004 - 14:55 #2
Ja det prøver jeg lige
Avatar billede _carsten Nybegynder
06. januar 2004 - 15:22 #3
Du skal slå over på SpringLayout, det giver dig den mulighed du ønsker, du kan selvfølgelig sagtens bruge GridBagLayout, men SpringLayout er betydelig mere simpel.

http://java.sun.com/docs/books/tutorial/uiswing/layout/spring.html
Avatar billede backupmand Nybegynder
06. januar 2004 - 17:32 #4
hm den har jeg ikke hørt om før, den må jeg lige checke ud
Avatar billede backupmand Nybegynder
07. januar 2004 - 13:52 #5
SpringLayout er ny fra java 1.4.x .... derfor havde jeg ikke hørt om det før, findes der et sted, hvor man kan læse om hvilke ændringer der er foretaget fra java version til java version?
SpringLayout rules! Det løste alle de problemer, jeg havde siddet med de sidste
mange uger! Fantastisk!
Avatar billede backupmand Nybegynder
07. januar 2004 - 13:53 #6
Fik du point?
Avatar billede mikkelbm Nybegynder
07. januar 2004 - 13:54 #7
du skal lige ha' carsten til at lægge et svar, før du kan give ham point...
Avatar billede _carsten Nybegynder
07. januar 2004 - 13:56 #8
Nej - men det skyldes at jeg først har svaret nu.

Ja - det gør der, skal se om jeg kan finde dem
Avatar billede backupmand Nybegynder
07. januar 2004 - 13:59 #9
tanks
Avatar billede _carsten Nybegynder
07. januar 2004 - 14:11 #10
Hvis du går ind her http://java.sun.com/j2se/1.4.2/download.html
og kigger efter "Release Notes" kan du se hvilke ændringer der er sket
fra tidligere version.

Men synes også der er et andet og bedre sted/beskrivelse, kan bare ikke finde det lige i øjeblikket - men finder jeg det, kaster jeg linket her.
Avatar billede backupmand Nybegynder
07. januar 2004 - 14:15 #11
tak
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester