我想创建一个JTable
,如下图:
将使用哪个java
课程以及可能的方法?
答案 0 :(得分:12)
多行JTable
单元格可以轻松使用自定义TableCellRenderer
。使用以下步骤创建TableCellRenderer
。
第1步:创建TableCellRenderer
以下代码显示为TableCellRenderer
值创建多行String[]
。可以将String[]
更改为Vector
或其他Collection
类型
public class MultiLineTableCellRenderer extends JList<String> implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//make multi line where the cell value is String[]
if (value instanceof String[]) {
setListData((String[]) value);
}
//cell backgroud color when selected
if (isSelected) {
setBackground(UIManager.getColor("Table.selectionBackground"));
} else {
setBackground(UIManager.getColor("Table.background"));
}
return this;
}
}
第2步:将TableCellRenderer
设置为JTable
MultiLineTableCellRenderer renderer = new MultiLineTableCellRenderer();
//set TableCellRenderer into a specified JTable column class
table.setDefaultRenderer(String[].class, renderer);
//or, set TableCellRenderer into a specified JTable column
table.getColumnModel().getColumn(columnIndex).setCellRenderer(renderer);
这是我测试的屏幕截图:
答案 1 :(得分:5)
基本上你可以将任何类型的JComponents
放到JTable
单元格中,取决于if是否内容可编辑,那就是跟我说下面
JTable
,其中一个TableColumn
没有TableHeader
JPanel
(GridBagLayout
)与JLabels
或JTextFields
JList
答案 2 :(得分:1)
如果您使用DefaultTableModel
,则无效。您必须为扩展AbstractTableModel
的表使用自定义模型,并且必须覆盖方法getColumnClass()
以及其他抽象方法。
您还可以设置表格行高as mentioned in a comment above。
答案 3 :(得分:0)
jTable1.setShowGrid(true);
试试这段代码:)
答案 4 :(得分:0)
jTable1.setShowHorizontalLines(true); // only HorizontalLines
jTable1.setShowVerticalLines(true); // only VerticalLines
jTable1.setShowGrid(true); // show Horizontal and Vertical
jTable1.setGridColor(Color.yellow); // change line color
答案 5 :(得分:0)
除了Channa Jayamuni建议的基于TableCellRenderer
的{{1}}之外,您还可以在JList<String>
之上构建多行渲染器。诀窍是使用DefaultTableCellRenderer
组件的HTML功能并相应地调整行高。这样可以保留默认渲染器的更多功能。
为所有字符串激活此渲染器将在大多数情况下满足您的要求:
JLabel
该解决方案可以在某种程度上处理自动行高。即如果用更少的行来更新内容,则不会降低表格行的高度。这是一项非常复杂的任务,因为它也取决于同一行中任何其他单元格的内容。
setDefaultRenderer(String.class, new MultiLineCellRenderer());
答案 6 :(得分:-2)
当任何表具有大量数据时,在JTable中应用滚动条。 JScrollPane为您提供了可滚动的工具来滚动滚动条,您将获得所有内容。使用JTable的简单示例:
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class ScrollableJTable{
public static void main(String[] args) {
new ScrollableJTable();
}
public ScrollableJTable(){
JFrame frame = new JFrame("Creating a Scrollable JTable!");
JPanel panel = new JPanel();
String data[][] =
{{"001","abc","xyz","wtwt","gwgw","tttr","rtrt"},
{"002","rwtr","ttrt","rtttr","trt","rtrt","trtrd"},
{"003","rtt","trt","trt","trrttr","trt","rtr"},
{"004","trt","trtt","trtrt","rtrtt","trt","trrt"},
{"001","rttr","trt","trt","trtr","trt","trttr"},
;
JTable table = new JTable(data,col);
JTableHeader header = table.getTableHeader();
header.setBackground(Color.yellow);
JScrollPane pane = new JScrollPane(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel.add(pane);
frame.add(panel);
frame.setSize(500,150);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
现在您可以根据您的要求修改此表