Làm thế nào để tô chọn một phần tử trong JList?

Các anh/ chị cho em hỏi… muốn tô chọn một phần tử trong JList thì làm thế nào ạ ? Tô chọn kiểu như thế này:

khi mình nhấp vào button thì nó tô chọn những số thỏa mãn… em không biết phương thức nào để tô chọn cả… em tìm hoài mà chẳng thấy đâu… :sob:
.

JListRendereder : ListCellRenderer: font, icon and color

1 Like

anh ơi… em không hiểu lắm… anh nói rõ hơn chút dc không ạ… :grinning:
em dùng setSelectedIndex, nhưng nó chỉ cho tô đen 1 giá trị… em cũng thử chuyển các Mode của Jlist nhưng vẫn không ăn thua…

Em dùng setSelctedIndices (int []) nó tô đen dc rồi anh ạ, tô đen mảng các phần tử luôn… haha :heart_eyes:
còn cái hàm anh cho, anh có thể giải thích thêm dc ko anh ? nó dùng để làm gì ạ ?

Custom jlist cellrenderer

1 Like

cho em xin phần code dc ko ạ?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;

class ComplexCellRenderer implements ListCellRenderer {
  protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

  public Component getListCellRendererComponent(JList list, Object value, int index,
      boolean isSelected, boolean cellHasFocus) {
    Font theFont = null;
    Color theForeground = null;
    Icon theIcon = null;
    String theText = null;

    JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
        isSelected, cellHasFocus);

    if (value instanceof Object[]) {
      Object values[] = (Object[]) value;
      theFont = (Font) values[0];
      theForeground = (Color) values[1];
      theIcon = (Icon) values[2];
      theText = (String) values[3];
    } else {
      theFont = list.getFont();
      theForeground = list.getForeground();
      theText = "";
    }
    if (!isSelected) {
      renderer.setForeground(theForeground);
    }
    if (theIcon != null) {
      renderer.setIcon(theIcon);
    }
    renderer.setText(theText);
    renderer.setFont(theFont);
    return renderer;
  }
}

public class ComplexRenderingSample {
  public static void main(String args[]) {
    Object elements[][] = {
        { new Font("Helvetica", Font.PLAIN, 20), Color.RED, new MyIcon(), "A" },
        { new Font("TimesRoman", Font.BOLD, 14), Color.BLUE, new MyIcon(), "A" },
        { new Font("Courier", Font.ITALIC, 18), Color.GREEN, new MyIcon(), "A" },
        { new Font("Helvetica", Font.BOLD | Font.ITALIC, 12), Color.GRAY, new MyIcon(), "A" },
        { new Font("TimesRoman", Font.PLAIN, 32), Color.PINK, new MyIcon(), "A" },
        { new Font("Courier", Font.BOLD, 16), Color.YELLOW, new MyIcon(), "A" },
        { new Font("Helvetica", Font.ITALIC, 8), Color.DARK_GRAY, new MyIcon(), "A" } };

    JFrame frame = new JFrame("Complex Renderer");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JList jlist = new JList(elements);
    ListCellRenderer renderer = new ComplexCellRenderer();
    jlist.setCellRenderer(renderer);
    JScrollPane scrollPane = new JScrollPane(jlist);
    frame.add(scrollPane, BorderLayout.CENTER);

    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

class MyIcon implements Icon {

  public MyIcon() {
  }

  public int getIconHeight() {
    return 20;
  }

  public int getIconWidth() {
    return 20;
  }

  public void paintIcon(Component c, Graphics g, int x, int y) {
    g.setColor(Color.RED);
    g.drawRect(0, 0, 25, 25);
  }
}
2 Likes

cảm ơn anh :grinning:

anh ơi em đang code java làm từ điển anh việt và em có dùng hashmap<String,String>

private void listValueChanged(javax.swing.event.ListSelectionEvent evt) {                                  
        if(!list.isSelectionEmpty()){
           (chưa biết code)
            txt.setText(hm.get(...............................));
        }
    } 

code của em đây. Đây là khi em chọn một giá trị nào đó trong list thì sẽ xuất trên thanh txt nhưng mà em k biết lấy giá trị gì để điền vào hm.get()… Ở đây list của em hiện ra các key của hm(HashMap).a có thể gợi ý em hàm gì đó để gọi ra String đã chọn được k ạ để điền vào chỗ … kia

Trong JList có phương thức getSelectedIndex có tác dung để trả về vị trí index được chọn trong JList.

2 Likes

Chào anh, anh cho em hỏi anh còn giữ code bài này không ạ? Có thể cho em xin tham khảo không anh, em cũng đang có bài tập giống y vậy. Em cám ơn anh ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?