Java 在JTable中添加3D效果
我使用以下代码创建了一个JTable:Java 在JTable中添加3D效果,java,swing,3d,jtable,Java,Swing,3d,Jtable,我使用以下代码创建了一个JTable: List<String> visibleColumns = new ArrayList<String>(); visibleColumns.add("Column 1"); visibleColumns.add("Column 2"); visibleColumns.add("Column 3"); DefaultTableModel tableModel = new DefaultTabl
List<String> visibleColumns = new ArrayList<String>();
visibleColumns.add("Column 1");
visibleColumns.add("Column 2");
visibleColumns.add("Column 3");
DefaultTableModel tableModel = new DefaultTableModel(visibleColumns.toArray(),100);
JTable table = new JTable(tableModel);
JPanel panel = new SwingPaneTable();
panel.setBounds(0, 0, 280, 150);
panel.setLayout(new BorderLayout());
panel.add(table, BorderLayout.CENTER);
panel.add(table.getTableHeader(), BorderLayout.NORTH);
// Set Row Header
JList<String> rowHeader = new JList<String>();
rowHeader.setFixedCellWidth(18);
rowHeader.setFixedCellHeight(18);
rowHeader.setBackground(panel.getBackground());
rowHeader.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
JScrollPane scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scroll.setRowHeaderView(rowHeader);
panel.add(scroll, BorderLayout.CENTER);
List visibleColumns=new ArrayList();
可见列。添加(“第1列”);
可见列。添加(“第2列”);
可见列。添加(“第3列”);
DefaultTableModel tableModel=新的DefaultTableModel(visibleColumns.toArray(),100);
JTable table=新的JTable(tableModel);
JPanel panel=新SwingPaneTable();
面板立根(0,0,280,150);
panel.setLayout(新的BorderLayout());
面板.添加(表格,边框布局.中心);
panel.add(table.getTableHeader(),BorderLayout.NORTH);
//设置行标题
JList rowHeader=新JList();
rowHeader.setFixedCellWidth(18);
行标题。设置固定单元格高度(18);
rowHeader.setBackground(panel.getBackground());
rowHeader.setboorder(UIManager.getBorder(“TableHeader.cellBorder”);
JScrollPane scroll=新的JScrollPane(表格,JScrollPane.VERTIONAL\U SCROLLBAR\U根据需要,JScrollPane.HORIONAL\U SCROLLBAR\U根据需要);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scroll.setRowHeaderView(行标题);
panel.add(滚动、边框布局、居中);
这张桌子看起来是这样的:
现在,我需要在我的表格中添加以下效果:
有人知道我在这段代码中是如何做到这一点的?您似乎要付出很多努力,但这似乎不是必需的(IMHO)
JScrollPane
为您提供了向滚动窗格的每个角添加角的方法,以及提供行标题和列标题
看
在JTable
的情况下,它会自动将JTableHeader
应用于JScrollPane
的列标题区域
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableModel;
public class TableExample {
public static void main(String[] args) {
new TableExample();
}
public TableExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
List<String> visibleColumns = new ArrayList<String>();
visibleColumns.add("Column 1");
visibleColumns.add("Column 2");
visibleColumns.add("Column 3");
DefaultTableModel tableModel = new DefaultTableModel(visibleColumns.toArray(), 100);
JTable table = new JTable(tableModel);
JScrollPane scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JPanel left = new JPanel();
left.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
scroll.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, left);
JPanel right = new JPanel();
right.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
scroll.setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, right);
JPanel columnHeader = new JPanel() {
@Override
public Dimension getPreferredSize() {
JScrollBar sb = new JScrollBar(JScrollBar.VERTICAL);
return new Dimension(sb.getPreferredSize().width, 10);
}
};
columnHeader.setBorder(new CompoundBorder(
new MatteBorder(1, 1, 0, 0, Color.WHITE),
new MatteBorder(0, 0, 1, 1, Color.GRAY)
));
scroll.setRowHeaderView(columnHeader);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(scroll);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.BorderFactory;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollBar;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.ScrollPaneConstants;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.border.BevelBorder;
导入javax.swing.border.CompoundBorder;
导入javax.swing.border.EtchedBorder;
导入javax.swing.border.MatteBorder;
导入javax.swing.table.DefaultTableModel;
公共类表格示例{
公共静态void main(字符串[]args){
新的TableExample();
}
公共表格示例(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
List visibleColumns=新建ArrayList();
可见列。添加(“第1列”);
可见列。添加(“第2列”);
可见列。添加(“第3列”);
DefaultTableModel tableModel=新的DefaultTableModel(visibleColumns.toArray(),100);
JTable table=新的JTable(tableModel);
JScrollPane scroll=新的JScrollPane(表格,JScrollPane.VERTIONAL\U SCROLLBAR\U根据需要,JScrollPane.HORIONAL\U SCROLLBAR\U根据需要);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JPanel left=新的JPanel();
left.setboorder(BorderFactory.createBevelOrder(BevelOrder.downed));
scroll.setCorner(ScrollPaneConstants.UPPER\u LEFT\u CORNER,LEFT);
JPanel right=新的JPanel();
右.setBordOrder(BorderFactory.createBevelOrder(BevelOrder.LOWERED));
scroll.setCorner(ScrollPaneConstants.UPPER\u RIGHT\u CORNER,RIGHT);
JPanel columnHeader=新的JPanel(){
@凌驾
公共维度getPreferredSize(){
JScrollBar sb=新的JScrollBar(JScrollBar.VERTICAL);
返回新维度(sb.getPreferredSize().width,10);
}
};
columnHeader.setBorder(新的复合边框)(
新的无光边框(1,1,0,0,颜色为白色),
新的蒙版边框(0,0,1,1,颜色为灰色)
));
scroll.setRowHeaderView(columnHeader);
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(滚动);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
}
看起来像两个带斜面3d边框的空按钮。