Avatar billede yac Nybegynder
21. marts 2004 - 18:39 Der er 11 kommentarer og
1 løsning

vedr. tab i List

I min liste skal den vise author og books, som hver hentes fra min database. Det er 2 strings, som jeg sætter sammen til en string, men for at holde dem adskilt, vil jeg gerne bruge en tab imellem dem, \t, men virker ikke i GUI?
Hvordan bruger jeg tab i gui?
Avatar billede _carsten Nybegynder
21. marts 2004 - 19:44 #1
Du er nødt til at lave sin egen listCellRenderer og bruge den i din JList
Avatar billede _carsten Nybegynder
21. marts 2004 - 21:08 #2
Er der behov for et eksempel ??
Avatar billede yac Nybegynder
21. marts 2004 - 21:35 #3
har prøvet at rode lidt med det, men ja, kan i ikke komme med et eksempel?
Avatar billede _carsten Nybegynder
21. marts 2004 - 21:42 #4
Det havde jeg lidt på fornemmeren, her er et eksempel

import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

public class CostumCellRender extends javax.swing.JFrame {
    public CostumCellRender() {
        initComponents();
        setSize(300,100);
    }
   
    private void initComponents() {
       
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
        list = new MyJList();

        scroll = new JScrollPane();
        scroll.setViewportView(list);
        getContentPane().add(scroll);

        pack();
    }
   
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public static void main(String args[]) {
        new CostumCellRender().show();
    }
   
    private JScrollPane scroll;
    private MyJList list;
}



class MyJList extends JList{
    public MyJList() {
        super();
        setCellRenderer(new MyJListCellRenderer());
       
        Vector v = new Vector();
        v.addElement("1\tA\tH");
        v.addElement("2\tB\tI");
        v.addElement("3\tC\tJ");
        v.addElement("4\tD\tK");
        v.addElement("5\tE\tL");
        v.addElement("6\tF\tM");
       
        setListData(v);
        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        setSelectedIndex(0);
    }
}


class MyJListCellRenderer extends JTextArea implements ListCellRenderer {
    public MyJListCellRenderer() {

    }
    public java.awt.Component getListCellRendererComponent(
                                                        JList list,
                                                        Object value,
                                                        int index,
                                                        boolean isSelected,
                                                        boolean cellHasFocus){
        if(isSelected)
            setBackground(list.getSelectionBackground());
        else
            setBackground(java.awt.Color.WHITE);
       
        setText(value.toString());
        return this;
    }
}
Avatar billede yac Nybegynder
21. marts 2004 - 21:50 #5
det kan da ikke være så besværligt...kan det ikke skrives kortere???
Kan godt se, det virker, men er alt det nødvendigt?
Avatar billede _carsten Nybegynder
21. marts 2004 - 21:57 #6
Det eneste du reelt skal udvide din egen GUI med, er den lille klasse som
i mit eksempel hedder MyJListCellRenderer(), hvilket jeg vil kalde peanuts.

Du har jo i forvejen både din GUI, JList og Vector/Array.
Avatar billede _carsten Nybegynder
21. marts 2004 - 21:58 #7
Og ja - det er absolut nødvendigt at lave sin egen cellRenderer hvis du vil
ændre på default, og det vil du jo.
Avatar billede yac Nybegynder
21. marts 2004 - 21:59 #8
det kan jeg godt se, hvad er det lige MyJListCellRenderer() gør?
Avatar billede _carsten Nybegynder
21. marts 2004 - 22:09 #9
Den extender JTextArea hvor der kan anvendes \t \n
          getListCellRendererComponent(
                      JList list,  // Refererer til aktuelle JList
                      Object value,// Refererer til værdien i JList
                      int index,  // Selected index
                      boolean isSelected,  // Valgt ikke valgt
                      boolean cellHasFocus){  //

        if(isSelected)
            // Henter en JList's normale baggrundsfarve på et
            // valgt item og sætter denne farve på valgt item
            setBackground(list.getSelectionBackground());
        else
            // Sætter baggrundsfarve på de items som ikke er valgt
            setBackground(java.awt.Color.WHITE);
       
        // Sætter teksten i JTextArea
        setText(value.toString());
       
        // Returnerer Componenten (JTextArea til JListen) som er det der
        // vises i JListen
        return this;
Avatar billede _carsten Nybegynder
21. marts 2004 - 22:12 #10
En JList's default cellRenderer er javax.swing.DefaultListCellRenderer
som extender JLabel, i JLabel kan du hverken bruge \n eller \t, derfor
erstatter man bare den DefaultListCellRenderer med sin egen.

Altså laver en klasse som extender JTextArea og bruger den som cellRenderer
i stedet for default rendereren.
Avatar billede _carsten Nybegynder
21. marts 2004 - 22:16 #11
Det her noget sludder
        if(isSelected)
            // Henter en JList's normale baggrundsfarve på et
            // valgt item og sætter denne farve på valgt item
            setBackground(list.getSelectionBackground());
        else

Skal være

        if(isSelected)
            // Henter en JList's normale baggrundsfarve på
            // JTextarea som repræsenterer valgt item
            setBackground(list.getSelectionBackground());
        else
Avatar billede _carsten Nybegynder
21. marts 2004 - 22:17 #12
Prøver lige igen
        if(isSelected)
            // Henter en JList's normale baggrundsfarve og sætter
            //  den på JTextarea'et som repræsenterer valgt item
            setBackground(list.getSelectionBackground());
        else
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