java设置表格可滚动条_java – 如何在SWT表中始终显示垂直滚动条?
It’s not possible to force the Table to always show scroll bars, the OS decides when to show them.
备择方案
是的,我提出了一个非常类似于我对这个问题的答案的解决方案:
我们的想法是使用ScrolledComposite(作为已建议的另一个答案)来处理滚动.表本身不会滚动.但是,这不会有任何区别,因为用户无法区分.
ScrolledComposite有一个名为setAlwaysShowScrollBars(boolean)的方法,您可以使用该方法强制它始终显示滚动条,即使它们不是必需的.
这是一些示例代码,它将说明我刚才谈到的内容:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout());
final ScrolledComposite composite = new ScrolledComposite(shell, SWT.V_SCROLL);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Table table = new Table(composite, SWT.NO_SCROLL | SWT.FULL_SELECTION);
table.setHeaderVisible(true);
composite.setContent(table);
composite.setExpandHorizontal(true);
composite.setExpandVertical(true);
composite.setAlwaysShowScrollBars(true);
composite.setMinSize(table.computeSize(SWT.DEFAULT, SWT.DEFAULT));
Button fillTable = new Button(shell, SWT.PUSH);
fillTable.setText("Fill table");
fillTable.setLayoutData(new GridData(SWT.FILL, SWT.END, true, false));
fillTable.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
if (table.getColumnCount() < 1)
{
for (int col = 0; col < 4; col++)
{
TableColumn column = new TableColumn(table, SWT.NONE);
column.setText("Column " + col);
}
}
for (int row = 0; row < 20; row++)
{
TableItem item = new TableItem(table, SWT.NONE);
for (int col = 0; col < table.getColumnCount(); col++)
{
item.setText(col, "Item " + row + " " + col);
}
}
for (int col = 0; col < table.getColumnCount(); col++)
{
table.getColumn(col).pack();
}
composite.setMinSize(table.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
Button clearTable = new Button(shell, SWT.PUSH);
clearTable.setText("Clear table");
clearTable.setLayoutData(new GridData(SWT.FILL, SWT.END, true, false));
clearTable.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
table.removeAll();
composite.setMinSize(table.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
shell.pack();
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
看起来像这样:
如您所见,滚动条始终可见.
UPDATE
正如评论中所指出的,当您向下滚动时,此方法不会保持表标题可见.如果您可以发布一个说明问题的小工作代码示例,我们可能会提出一个替代方案(与强制滚动条无关).
UPDATE2
下面是一些应该做你想做的代码,诀窍就是在TableViewer的父级上触发resize事件,显示的水平滚动条不是必需的,并且在你调整窗口大小后它会消失:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout());
createMasterPart(shell);
shell.pack();
shell.setSize(400, 300);
shell.open();
shell.layout(true, true);
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void createMasterPart(Composite parentComposite)
{
Composite composite = new Composite(parentComposite, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(new GridLayout(1, false));
Composite tableComposite = new Composite(composite, SWT.NONE);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
tableComposite.setLayout(tableColumnLayout);
tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
TableViewer tableViewer = new TableViewer(tableComposite, SWT.BORDER | SWT.FULL_SELECTION);
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableViewerColumn firstTableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn firstTableColumn = firstTableViewerColumn.getColumn();
firstTableColumn.setText("Sample");
firstTableViewerColumn.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object element)
{
Dummy p = (Dummy) element;
return p.first;
}
});
TableViewerColumn secondTableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn secondTableColumn = secondTableViewerColumn.getColumn();
secondTableColumn.setText("Speaker");
secondTableViewerColumn.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object element)
{
Dummy p = (Dummy) element;
return p.second;
}
});
TableViewerColumn thirdTableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn thirdTableColumn = thirdTableViewerColumn.getColumn();
thirdTableColumn.setText("Remark");
thirdTableViewerColumn.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object element)
{
Dummy p = (Dummy) element;
return p.third;
}
});
List elements = new ArrayList<>();
for(int i = 0; i < 20; i++)
{
elements.add(new Dummy("firstfirstfirst " + i, "secondsecondsecond " + i, "thirdthirdthirdthirdthirdthird " + i));
}
tableViewer.setInput(elements);
tableColumnLayout.setColumnData(firstTableColumn, new ColumnWeightData(1, true));
tableColumnLayout.setColumnData(secondTableColumn, new ColumnWeightData(1, true));
tableColumnLayout.setColumnData(thirdTableColumn, new ColumnWeightData(2, true));
}
private static class Dummy
{
public String first;
public String second;
public String third;
public Dummy(String first, String second, String third)
{
this.first = first;
this.second = second;
this.third = third;
}
}
java设置表格可滚动条_java – 如何在SWT表中始终显示垂直滚动条?相关推荐
- java如何保存初始化数据_java – 如何在JUnit测试中初始化数据
我的任务是为服务层编写压力(负载)测试.主要是CRUD操作.我们使用JUnit作为测试框架,使用JUnitPerf构建负载测试,使用 Spring注入服务bean,使用hibernate访问数据库. ...
- java中设置表格的宽度_java 画pdf用itext调整表格宽度、自定义各个列宽的方法
ps:我用的版本是7.0.5 场景: 左侧第一列宽度不够,导致数据换行. Table table = new Table(new float[2]); new 一个Table之后,setWidthPe ...
- java设置表格第一列长度_java 画pdf用itext调整表格宽度、自定义各个列宽的方法...
ps:我用的版本是7.0.5 场景: 左侧第一列宽度不够,导致数据换行. table table = new table(new float[2]); new 一个table之后,setwidthpe ...
- 电脑表格日期怎么修改原有日期_如何在Excel表中自动生成记录数据的日期和时间...
几天前有人问我: 在Excel表格中输入信息时,如何在日期单元格中自动生成日期和时间? 输入表格时,我们经常需要输入时间,而不是填写存储时间,为了减少输入工作量,您可以将日期设置为自动生成. 例如,当 ...
- java 往excel中写数据库,poi将数据写入excel表格-怎么用java把数据库里的数据写入到excel表中...
怎么用java把数据库里的数据写入到excel表中 你是想读取excel内容,然后整合一下数据,然后再生成一个新的excel吧 package aa; import java.io.FileInput ...
- 计算机利用公式计算实发工资怎么弄,如何在excel 表中 添加税收计算程序?excle中计算税收的公式...
Excel新个税的计算公式 =ROUND(MAX((A2-5000)*{0.03;0.1;0.2;0.25;0.3;0.35;0.45}-{0;210;1410;2660;4410;7160;1516 ...
- 如何在Excel表中快速提取想要的数据
如何在Excel表中快速提取数据 目录 如何在Excel表中快速提取数据 1.例如:需要提取右侧表格中蔬菜二月计划与销售数量 2.在白菜计划数量的单元格中输入函数公式=VLOOKUP("*& ...
- 温故知新MySQL--如何在MySQL表中删除重复行
2019独角兽企业重金招聘Python工程师标准>>> 如何在MySQL表中删除重复行 在实际应用中,会有需要删除重复数据的场景.这里简单介绍下如何删除重复的数据 1. 准备数据 C ...
- python excel 数据匹配_python将一个excel表格的数据匹配到另一个表中
python将一个excel表格的数据匹配到另一个表中 python将一个excel表格的数据匹配到另一个表中 打开excel表,需要在另一个表中匹配相应学生姓名的学号信息. 之前尝试了excel中的 ...
最新文章
- [转载]IT知识体系结构图
- GetSafeHwnd()函数
- 子网、超网和无类域间路由
- ERROR: cannot start IntelliJ IDEA. No JDK found to run IDEA. Please validate either IDEA_JDK, JDK_HO
- ADO.NET学习笔记--数据汇总(聚合函数)
- Fragment管理工具类
- js基础---js组成以及基本认知
- HDU 2328 Corporate Identity
- 启动的时候闪退_APP突然闪退怎么办?学会这五个妙招比换手机实用,看完望周知...
- Why Ceph and how to use Ceph?
- 出现 Request Entity Too Large问题的解决方法
- [渝粤教育] 武汉理工大学 复变函数与积分变换 参考 资料
- JAVA压缩、解压,使用Apache Common Compress包下载链接
- 面对互联网寒冬裁员潮,HR都在干什么?
- 【翻译】十大要避免的Ext JS开发方法
- opencv应用实例-金圣韬-专题视频课程
- 关于mac上的所有东西都变小了
- 立即行动是打败烦躁和焦虑的最好办法
- 怎么关闭计算机桌面的弹窗,电脑桌面弹出的广告怎么设置关闭
- 动手实践,使用div盒子模型设计一个播放器效果/动手实践