随着年龄的增长,我越来越多地在OSX中使用 Ctrl - + 来增加各种窗口(浏览器,编辑器等)的字体大小。但是,在自定义应用中的JTable
上,它当然不起作用。
如何将此功能添加到我自己的Swing JTable
?
我希望增加/减少JTable
中已有的任何字体,并适当调整列宽。
我有一个大致的想法如何编码(添加热键,获取当前字体,增加大小,设置新字体,无效),但不知道如何将它应用于我已有的许多表。也不是如何正确调整列宽。
我应该创建一个新的基类还是添加某种插件?其他想法?
答案 0 :(得分:0)
这个解决方案有点粗糙,但它演示了如何使用 ctrl + 和 ctrl - 实现放大和缩小:
public class FontTable extends JPanel {
JTable table;
FontTable() {
Object[][] data = {{"aaa", "122", "_____"}, {",,,,,", ",,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}};
Object[] names = {"C1", "C2", "C3"};
table = new JTable(data, names);
InputMap im = table.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke('=', InputEvent.CTRL_DOWN_MASK), "zoom in");
im.put(KeyStroke.getKeyStroke('-', InputEvent.CTRL_DOWN_MASK), "zoom out");
table.getActionMap().put("zoom in", new ZoomAction(true));
table.getActionMap().put("zoom out", new ZoomAction(false));
setLayout(new BorderLayout());
add(new JScrollPane(table));
}
class ZoomAction extends AbstractAction {
boolean in;
ZoomAction(boolean in) {
this.in = in;
}
@Override
public void actionPerformed(ActionEvent e) {
Font oldFont = table.getFont();
float size = oldFont.getSize() + (in ? +2 : -2);
table.setFont(oldFont.deriveFont(size));
for (int row = 0; row < table.getRowCount(); row++) {
int rowHeight = table.getRowHeight(row);
for (int col = 0; col < table.getColumnCount(); col++) {
Component comp = table.prepareRenderer(table.getCellRenderer(row, col), row, col);
TableColumn column = table.getColumnModel().getColumn(col);
int colWidth = column.getWidth();
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
colWidth = comp.getPreferredSize().width;
column.setPreferredWidth(colWidth);
}
table.setRowHeight(row, rowHeight);
}
}
}
}
我使用Camick's answer作为参考。把它放在一些框架中进行测试。
至于向后实现它,您可以子类JTable
并添加此新功能,然后用新类替换现有的功能,或者在接口中使用嵌套类执行更棘手的操作并实现该接口。