有必要在任何时候启用水平滚动条吗?
情况就是这样:我有一个JTable单元格存储了很长的数据.因此,我需要有水平滚动条.
有人对此有所了解吗?
实现Scrollable接口需要实现getPreferredScrollableViewportSize()方法.这通常只需将调用转发到getPreferredSize()来完成 - 除非Scrollable的其他参数可能影响首选的JViewport大小,例如JTree中的setVisibleRowCount()方法.
我有一种情况,我认为这种方法可以帮助我实现我的目标,但在我的getPreferredScrollableViewportSize()实现中的一个简单的print语句确认它永远不会被调用.搜索JScrollPane,ScrollPaneLayout和JViewport确认没有(直接)调用该方法.然而,JScrollPane中的注释明确指出ScrollPaneLayout使用它,我可以确认它是在JTree中按预期实现的.
什么时候调用,什么类(大概是LayoutManager)和什么时候?我正在使用JDK 1.7_07
我有一个带有几个JTable的JFrame.在一个特定的JTable上,我需要在选择的JFrame中选择单元格的位置(通过代码完成选择).我想在Glass Pane上画一些东西.我怎么能做到这一点?
Point p = gui.rerouteTable.getLocation();
SwingUtilities.convertPointToScreen(p,gui.rerouteTable);
Run Code Online (Sandbox Code Playgroud)
我以为这可以让我在桌子的左上角.通过Cell Height和SelectionListener,我可以克服我需要的位置.但我甚至得不到桌子的左手角落.为什么不?gui.rerouteTable.getLocation()返回(0,0)所以很明显convertPointToScreen无法正常工作.
我创建了一个简单的Java应用程序,每秒连续10秒为a添加一个新行JTable.它由三个类组成.
程序启动后调用的主类
public class JarBundlerProblem {
public static void main(String[] args)
{
System.err.println("Initializing controller");
new Controller();
}
}
Run Code Online (Sandbox Code Playgroud)
一个控制器,用于创建GUI并对其进行更改 doWork()
public class Controller {
public Controller()
{
doWork(null);
}
public static void doWork(String s)
{
GUI gui = new GUI();
for (int i=0; i<10; i++)
{
gui.addRow("Line "+(i+1));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,GUI
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class GUI {
private JFrame frame = …Run Code Online (Sandbox Code Playgroud) 我使用HashMap来填充一个或多或少不断更新的JTable:
public Map <Long,MyObject> tableData = new HashMap <Long,MyObject>();
每次将新元素添加到地图时,都会通知表模型:
tableData.put(id, anObject);
AbstractTableModel atm = (AbstractTableModel)model;
atm.fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)
另外,我有一个TableRowSorter,它根据特定条件对行进行排序:
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
.
.
.
table.setRowSorter(sorter);
Run Code Online (Sandbox Code Playgroud)
我的目标是(垂直)滚动条始终跳转到最后添加的行,由于分拣机可能使用此行,因此可能位于表格的中间位置:
table.scrollRectToVisible(table.getCellRect(row,0, true));
Run Code Online (Sandbox Code Playgroud)
问题是我不知道行的索引:)我可以在哪里获取此索引?
java ×5
swing ×5
jtable ×3
jscrollpane ×2
jarbundler ×1
jscrollbar ×1
jviewport ×1
macos ×1
scroll ×1
scrollable ×1