27. maj 2004 - 21:47
Der er
13 kommentarer og 1 løsning
Margin i Jlist
Jeg har lavet en tilpasset jlist via ListCellRenderer Men i min Jlist står checkboxes helt op af venstre side. jeg mangler lidt margin. Hvordan sætter jeg den? protected class CellRenderer implements ListCellRenderer { public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JCheckBox checkbox = (JCheckBox) value; checkbox.setBackground(isSelected ? getSelectionBackground() : getBackground()); checkbox.setForeground(isSelected ? getSelectionForeground() : getForeground()); checkbox.setEnabled(isEnabled()); checkbox.setFont(getFont()); checkbox.setFocusPainted(false); checkbox.setBorderPainted(true); checkbox.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder); return checkbox; } }
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
Er det en indre klasse ???
Hvad med at lægge JCheckBox på en JPanel og så returnere panelet i steden. På panelet kan du jo så vælge f.eks. flowlayout og sætte marging på den.
Ja det har jeg også tænkt. Men er det ikke muligt at sætte en margin på en component?
Ja inner class... public class CheckBoxList extends JList { protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); public CheckBoxList() { setCellRenderer(new CellRenderer()); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { int index = locationToIndex(e.getPoint()); if (index != -1) { JCheckBox checkbox = (JCheckBox) getModel().getElementAt(index); checkbox.setSelected( !checkbox.isSelected()); repaint(); } } } ); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } protected class CellRenderer implements ListCellRenderer { public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JCheckBox checkbox = (JCheckBox) value; checkbox.setBackground(isSelected ? getSelectionBackground() : getBackground()); checkbox.setForeground(isSelected ? getSelectionForeground() : getForeground()); checkbox.setEnabled(isEnabled()); checkbox.setFont(getFont()); checkbox.setFocusPainted(false); checkbox.setBorderPainted(true); checkbox.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder); return checkbox; } } }
Slettet bruger
27. maj 2004 - 22:29
#5
Hvad med (på din JCheckBox) at bruge en CompoundBorder, som består af den allerede eksisterende border og en emptyborder hvor left-margin er sat til X pixel ?
jo der lyder godt. Hvordan ser det ud?
Prøv lige at override getInsets og se om det ikke er løsningen public java.awt.Insets getInsets(){ return new java.awt.Insets(5,5,5,5); } Tilføj metoden til din CheckBoxList Ps. gider ikke mere i dag.
Slettet bruger
27. maj 2004 - 22:36
#8
checkbox.setBorder(createCompoundBorder(BorderFactory.createEmptyBorder(50, 0, 0, 0), isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder)); burde kunne gøre det, uden at skulle oprette en custom komponent, hvor getInsets bliver overridet...
Det virkede. Du behøver ikke mere :)
Var getInsets() løsningen ??
> corholio Det drejer sig jo om at lave en større og unødvendig grænse på en komponent, når metoden getInsets er lavet til lige nøjagtig det formål, nemlig at bestemme hvor i en komponent, at andre komponenter skal indsættes. Vil tillade mig at lægge et svar
Slettet bruger
27. maj 2004 - 22:47
#14
ja ok, sorry..... jeg burde nok ha' læst spørgsmålet lidt mere grundigt igennem.
Kurser inden for grundlæggende programmering