java swing tab例子_Java Swing - 如何创建Tab字符JList renderer

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.FontMetrics;

import java.awt.Graphics;

import java.awt.Insets;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import java.util.StringTokenizer;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.ListCellRenderer;

import javax.swing.UIManager;

import javax.swing.border.Border;

import javax.swing.border.EmptyBorder;

public class Main extends JFrame {

protected JList list;

public Main() {

super("Swing List with Tab Renenderer");

setSize(500, 240);

String[] items = { "cloumn 1\t column 2\t Column 3",

"cloumn 1\t column 2\t Column 3" };

list = new JList(items);

TabListCellRenderer renderer = new TabListCellRenderer();

list.setCellRenderer(renderer);

JScrollPane scrollPane = new JScrollPane();

scrollPane.getViewport().add(list);

getContentPane().add(scrollPane, BorderLayout.CENTER);

WindowListener exitEvent = new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

};

addWindowListener(exitEvent);

setVisible(true);

}

public static void main(String argv[]) {

new Main();

}

}

class TabListCellRenderer extends JLabel implements ListCellRenderer {

protected static Border m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);

protected FontMetrics m_fm = null;

public TabListCellRenderer() {

super();

setOpaque(true);

setBorder(m_noFocusBorder);

}

public Component getListCellRendererComponent(JList list, Object value,

int index, boolean isSelected, boolean cellHasFocus) {

setText(value.toString());

setBackground(isSelected ? list.getSelectionBackground() : list

.getBackground());

setForeground(isSelected ? list.getSelectionForeground() : list

.getForeground());

setFont(list.getFont());

setBorder((cellHasFocus) ? UIManager

.getBorder("List.focusCellHighlightBorder") : m_noFocusBorder);

return this;

}

public void paint(Graphics g) {

m_fm = g.getFontMetrics();

g.setColor(getBackground());

g.fillRect(0, 0, getWidth(), getHeight());

getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());

g.setColor(getForeground());

g.setFont(getFont());

Insets insets = getInsets();

int x = insets.left;

int y = insets.top + m_fm.getAscent();

StringTokenizer st = new StringTokenizer(getText(), "\t");

while (st.hasMoreTokens()) {

String str = st.nextToken();

g.drawString(str, x, y);

//insert distance for each tab

x += m_fm.stringWidth(str) + 50;

if (!st.hasMoreTokens())

break;

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值