java swing中对于JList的使用(三)

 
package com.robert;

import javax.swing.*;
import java.awt.*;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 11-11-12
 * Time: 下午9:57
 * To change this template use File | Settings | File Templates.
 */
public class ListRenderingTest {

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new ListRenderingFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

package com.robert;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.ArrayList;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 11-11-12
 * Time: 下午9:59
 * To change this template use File | Settings | File Templates.
 */
public class ListRenderingFrame extends JFrame {

    private static final int DEFAULT_WIDHT = 400;
    private static final int DEFAULT_HEIGHT = 300;
    private JTextArea text;
    private JList fontList;

    public ListRenderingFrame()
    {
        setTitle("ListRenderingTest");
        setSize(DEFAULT_WIDHT,DEFAULT_HEIGHT);

        ArrayList<Font> fonts = new ArrayList<Font>();
        final int SIZE = 24;
        fonts.add(new Font("Serif", Font.PLAIN, SIZE));
        fonts.add(new Font("SansSerif", Font.PLAIN, SIZE));
        fonts.add(new Font("Monospaced", Font.PLAIN, SIZE));
        fonts.add(new Font("Dialog", Font.PLAIN, SIZE));
        fonts.add(new Font("DialogInput", Font.PLAIN, SIZE));
        fontList = new JList(fonts.toArray());
        fontList.setVisibleRowCount(4);
        fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        fontList.setCellRenderer(new FontCellRenderer());
        JScrollPane scrollPane = new JScrollPane(fontList);

        JPanel p = new JPanel();
        p.add(scrollPane);
        fontList.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                Font font = (Font)fontList.getSelectedValue();
                text.setFont(font);
            }
        });

        Container contentPane = getContentPane();
        contentPane.add(p, BorderLayout.SOUTH);
        text = new JTextArea("The quick brown fox jumps over the lazy dog");
        text.setFont((Font)fonts.get(0));
        text.setLineWrap(true);
        text.setWrapStyleWord(true);
        contentPane.add(text, BorderLayout.CENTER);
    }

}

package com.robert;

import com.sun.corba.se.impl.orbutil.graph.Graph;
import sun.java2d.loops.DrawGlyphListAA;

import javax.swing.*;
import java.awt.*;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 11-11-12
 * Time: 下午10:22
 * To change this template use File | Settings | File Templates.
 */
  class FontCellRenderer extends JComponent implements ListCellRenderer
  {
      private Font font;
      private Color background;
      private Color foreground;
      public Component getListCellRendererComponent(JList list,Object value,int index,
              boolean isSelected, boolean cellHasFocus)
      {
          font = (Font)value;
          background = isSelected ? list.getSelectionBackground() : list.getBackground();
          foreground = isSelected ? list.getSelectionForeground() : list.getForeground();
          return this;
      }

      public void paintComponent(Graphics g)
      {
          String text = font.getFamily();
          FontMetrics fm = g.getFontMetrics(font);
          g.setColor(background);
          g.fillRect(0, 0, getWidth(), getHeight());
          g.setColor(foreground);
          g.setFont(font);
          g.drawString(text, 0, fm.getAscent());
      }

      public Dimension getPreferredSize()
      {
          String text = font.getFamily();
          Graphics g = getGraphics();
          FontMetrics fm = g.getFontMetrics(font);
          return new Dimension(fm.stringWidth(text), fm.getHeight());
      }
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值