本文目录一览:
- 1、android垂直TextView怎么能让它自动滚动
- 2、java怎样设置表格滚动条
- 3、Android中TextView如何实现水平和垂直滚动
- 4、java 添加一个竖滚动条
- 5、Java swing 如何让垂直滚动条始终在最下面
- 6、JAVA 如何使JScrollPane中的JTextArea自动滚动到最后一行
android垂直TextView怎么能让它自动滚动
这是跑马灯的效果。实现该功能步骤:
1、自定义Views,继承自TextView。
2、重写onDrow方法,计算每次的滚动的距离。
3、计算view的Y轴的重点,让当前显示的处于高亮显示状态。
4、定时的刷新View使其界面不断的刷先,出现滚动的效果。
5、实现数据结构,将数据传给view。
几个步骤代码可以参考下面
下面看看主要代码:
1、创建一个类继承TextView
/**
* @author xushilin
*
* 垂直滚动的TextView Widget
*/
public class VerticalScrollTextView extends TextView
2、实现构造函数:
public VerticalScrollTextView(Context context) {
super(context);
init();
}
public VerticalScrollTextView(Context context, AttributeSet attr) {
super(context, attr);
init();
}
public VerticalScrollTextView(Context context, AttributeSet attr, int i) {
super(context, attr, i);
init();
}
private void init() {
setFocusable(true);
//这里主要处理如果没有传入内容显示的默认值
if(list==null){
list=new ArrayListNotice();
Notice sen=new Notice(0,"暂时没有通知公告");
list.add(0, sen);
}
//普通文字的字号,以及画笔颜色的设置
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(16);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.SERIF);
//高亮文字的字号,以及画笔颜色的设置
mPathPaint = new Paint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(16);
mPathPaint.setTypeface(Typeface.SANS_SERIF);
}
3、从写onDraw方法,并计算文字的行距,并且将将普通文字和高亮文字,在这个方法中绘制出来
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paint p = mPaint;
Paint p2 = mPathPaint;
p.setTextAlign(Paint.Align.CENTER);
if (index == -1)
return;
p2.setTextAlign(Paint.Align.CENTER);
canvas.drawText(list.get(index).getName(), mX, middleY, p2);
float tempY = middleY;
for (int i = index - 1; i = 0; i--) {
tempY = tempY - DY;
if (tempY 0) {
break;
}
canvas.drawText(list.get(i).getName(), mX, tempY, p);
}
tempY = middleY;
for (int i = index + 1; i list.size(); i++) {
tempY = tempY + DY;
if (tempY mY) {
break;
}
canvas.drawText(list.get(i).getName(), mX, tempY, p);
}
}
4、计算Y轴中值以及更新索引
protected void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
mX = w * 0.5f;
mY = h;
middleY = h * 0.5f;
}
private long updateIndex(int index) {
if (index == -1)
return -1;
this.index=index;
return index;
}
5、定时更新view,并将接口暴露给客户程序调用。
public void updateUI(){
new Thread(new updateThread()).start();
}
class updateThread implements Runnable {
long time = 1000;
int i=0;
public void run() {
while (true) {
long sleeptime = updateIndex(i);
time += sleeptime;
mHandler.post(mUpdateResults);
if (sleeptime == -1)
return;
try {
Thread.sleep(time);
i++;
if(i==getList().size())
i=0;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() {
public void run() {
invalidate();
}
};
6、xml布局文件中调用:
?xml version="1.0" encoding="utf-8"?
!-- Demonstrates scrolling with a ScrollView. --
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
com.demo.xsl.text.SampleView
android:id="@+id/sampleView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/selector"
/
/LinearLayout
7、java代码中调用,传递数据:
package com.demo.xsl.text;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class VerticalScrollTextActivity extends Activity {
SampleView mSampleView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSampleView = (SampleView) findViewById(R.id.sampleView1);
List lst=new ArrayListSentence();
for(int i=0;i30;i++){
if(i%2==0){
Sentence sen=new Sentence(i,i+"、金球奖三甲揭晓 C罗梅西哈维入围 ");
lst.add(i, sen);
}else{
Sentence sen=new Sentence(i,i+"、公牛欲用三大主力换魔兽?????");
lst.add(i, sen);
}
}
//给View传递数据
mSampleView.setList(lst);
//更新View
mSampleView.updateUI();
}
}
java怎样设置表格滚动条
用swing类里的JScrollPane实现
JScrollPane(Component view,int vsbPolicy,int hsbPolicy)
创建一个 JScrollPane,它将视图组件显示在一个视口中,视图位置可使用一对滚动条控制。滚动条策略指定滚动条在何时显示,例如,如果 vsbPolicy 为 VERTICAL_SCROLLBAR_AS_NEEDED,则只有在垂直查看无法完全显示时,垂直滚动条才显示。可用的策略设定在
setVerticalScrollBarPolicy(int) 和 setHorizontalScrollBarPolicy(int) 中列出。
参数:
view - 将显示在滚动窗格视口中的组件
vsbPolicy - 指定垂直滚动条策略的一个整数
hsbPolicy - 指定水平滚动条策略的一个整数
JScrollPane scrollPane = new JScrollPane(你要添加的表格,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
)
Android中TextView如何实现水平和垂直滚动
殇 殇雲的专栏 雲的专栏 软件开发 软件开发 一 一、只想让TextView显示一行,但是文字超过 、只想让TextView显示一行,但是文字超过 在开头显示省略号 android:singleLine="true" android:ellipsize="start" 在结尾显示省略号 android:singleLine="true" android:ellipsize="end" 在中间显示省略号 android:singleLine="true" android:ellipsize="middle" 横向自动滚动(跑马灯效果) android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" 以上4个效果都要加上�0�2android:singleLine="true",因为TextView默认是会自动换行的 android:marqueeRepeatLimit="marquee_forever"是设置永远重复,当然你也可以设置具体的数字 android:focusable="true"和android:focusableInTouchMode="true"一定要加上,不然滚动效果出不来在Java代码中加入下面一句话就可以实现垂直滚动
java 添加一个竖滚动条
滚动条使用类似于下面的代码创建:
redSlider=new Scrollbar(Scrollbar.VERTICAL, 0, 1, 0, 255);
add(redSlider);
当用户改变滚动条的值时,滚动条接收一个 AdjustmentEvent 实例。滚动条处理此事件,将它传递给所有已注册的侦听器。
任何希望滚动条值发生变化时被通知的对象都应该实现包 java.awt.event 中定义的 AdjustmentListener接口。调用 addAdjustmentListener 和 removeAdjustmentListener 方法能动态地添加或删除侦听器。
AdjustmentEvent 类定义了五种调整事件,如下所示:
当用户拖动滚动条的滑动块时,发送 AdjustmentEvent.TRACK。
当用户单击水平滚动条的左箭头或垂直滚动条的上箭头,或从键盘做出等效动作时,发送AdjustmentEvent.UNIT_INCREMENT。
当用户单击水平滚动条的右箭头或垂直滚动条的下箭头,或从键盘做出等效动作时,发送AdjustmentEvent.UNIT_DECREMENT。
当用户单击水平滚动条滑动块左边的轨道,或垂直滚动条滑动块上边的轨道时,发送AdjustmentEvent.BLOCK_INCREMENT。按照惯例,如果用户使用定义了 Page Up 键的键盘,则Page Up 键是等效的。
当用户单击水平滚动条滑动块右边的轨道,或垂直滚动条滑动块下边的轨道时,发送AdjustmentEvent.BLOCK_DECREMENT。按照惯例,如果用户使用定义了 Page Down 键的键盘,则Page Down 键是等效的。
Java swing 如何让垂直滚动条始终在最下面
实现:
(1)设置JTextPane 的策略
DefaultCaret caret = (DefaultCaret)resultTextPane.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
(2)当JTextPane 动态增加内容时
resultTextPane.setSelectionStart(resultTextPane.getText().length());
JScrollBar vertical = scrollPane.getVerticalScrollBar();
vertical.setValue( vertical.getMaximum());
说明:
(1)resultTextPane 的类型是JTextPane;
(2)JTextPane和JTextArea的区别:
JTextPane 可以设置html样式;
JTextArea无法设置成为html样式
JAVA 如何使JScrollPane中的JTextArea自动滚动到最后一行
JTextArea经常和JScrollPane 搭配使用. 这样可以通过滚动条显示更多的内容.
如果要使文本域显示最后1行, 有2种方式:
第一种方式:
操控垂直滚动条, 把垂直滚动条移动到最后面即可
JTextArea jta = new JTextArea();
jta.setText("添加很多行的文字");
JScrollPane jsp = new JScrollPane(jta);
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());//控制垂直滚动条到最后面
第二种方式:
操作文本域, 把文本域的位置设置到文本的最后.并让文本域获得焦点即可
JTextArea jta = new JTextArea();
jta.setText("添加很多行的文字");
JScrollPane jsp = new JScrollPane(jta);
//下面的代码就是移动到文本域的最后面
jta.selectAll();
if (jta.getSelectedText() != null) {
jta.setCaretPosition(jta.getSelectedText().length());
jta.requestFocus();
}
完整的代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTPDemo extends JFrame implements ActionListener {
JTextArea jta;
JButton jbHome;
JButton jbEnd;
JScrollPane jsp;
final String NEW_LINE =System.getProperty("line.separator");
public JTPDemo() {
jbHome = new JButton("开始位置");
jbHome.addActionListener(this);
jbEnd = new JButton("最后一行");
jbEnd.addActionListener(this);
JPanel jpsouth = new JPanel();
jpsouth.add(jbHome);
jpsouth.add(jbEnd);
add(jpsouth, BorderLayout.SOUTH);
jta = new JTextArea();
jta.setLineWrap(true);
jta.append("开始"+NEW_LINE);
for (int i = 1; i 50; i++) {
jta.append(i+NEW_LINE);
}
jta.append("最后一行");
jsp =new JScrollPane(jta);
add(jsp);
setTitle("文本域测试");
setSize(360, 320);
setLocationRelativeTo(null);//窗口居中
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new JTPDemo();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbHome) {//跳到开始的位置
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMinimum());
// jta.setCaretPosition(0);
// jta.requestFocus();
} else if (e.getSource() == jbEnd) {//跳到最后一行的位置
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());
// jta.selectAll();
// if (jta.getSelectedText() != null) {
// jta.setCaretPosition(jta.getSelectedText().length());
// jta.requestFocus();
// }
}
}
}
效果图