Java 如何在列标题上获得凸起的边框?
如何在“检查”列中获得凸起的边框,就像在其他列中一样?我发现了一个与此类似的问题,但这里我使用的是Java 如何在列标题上获得凸起的边框?,java,swing,Java,Swing,如何在“检查”列中获得凸起的边框,就像在其他列中一样?我发现了一个与此类似的问题,但这里我使用的是InternalJFrame,而main不可用 下面是一个屏幕截图,显示了我的意思: 这是我的代码: class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener { protected CheckBoxHeader rendererComponent; protected in
InternalJFrame
,而main
不可用
下面是一个屏幕截图,显示了我的意思:
这是我的代码:
class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener {
protected CheckBoxHeader rendererComponent;
protected int column;
protected boolean mousePressed = false;
public CheckBoxHeader(ItemListener itemListener) {
rendererComponent = this;
rendererComponent.addItemListener(itemListener);
}
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
if (table != null) {
JTableHeader header = table.getTableHeader();
if (header != null) {
rendererComponent.setForeground(Color.BLACK);
Color lightYellow= new Color(255, 255, 170);
rendererComponent.setBackground(lightYellow);
rendererComponent.setFont(new Font("Consolas", Font.BOLD, 14));
setOpaque(true);
rendererComponent.setBorder(BorderFactory.createRaisedBevelBorder());
setHorizontalAlignment( JLabel.CENTER );
header.addMouseListener(rendererComponent);
}
}
setColumn(column);
rendererComponent.setText(value.toString());
//setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return rendererComponent;
}
protected void setColumn(int column) {
this.column = column;
}
public int getColumn() {
return column;
}
protected void handleClickEvent(MouseEvent e) {
if (mousePressed) {
mousePressed=false;
JTableHeader header = (JTableHeader)(e.getSource());
JTable tableView = header.getTable();
TableColumnModel columnModel = tableView.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = tableView.convertColumnIndexToModel(viewColumn);
if (viewColumn == this.column && e.getClickCount() == 1 && column != -1) {
doClick();
}
}
}
public void mouseClicked(MouseEvent e) {
handleClickEvent(e);
((JTableHeader)e.getSource()).repaint();
}
public void mousePressed(MouseEvent e) {
mousePressed = true;
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
class MyItemListener implements ItemListener
{
public void itemStateChanged(ItemEvent e) {
Object source = e.getSource();
if (source instanceof AbstractButton == false) return;
boolean checked = e.getStateChange() == ItemEvent.SELECTED;
for(int x = 0, y = DailydatasTbl.getRowCount(); x < y; x++)
{
// DailydatasTbl.setValueAt(new Boolean(checked),x,0);
}
}
}
类CheckBoxHeader扩展JCheckBox实现TableCellRenderer、MouseStener{
受保护的CheckBoxHeader渲染器组件;
受保护的int列;
受保护的布尔值mousePressed=false;
公共CheckBoxHeader(ItemListener ItemListener){
RenderComponent=此;
RenderComponent.addItemListener(itemListener);
}
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
如果(表!=null){
JTableHeader=table.getTableHeader();
if(标题!=null){
RenderComponent.setForeground(颜色:黑色);
颜色浅黄色=新颜色(255、255、170);
渲染器组件。背景(浅黄色);
renderComponent.setFont(新字体(“Consolas”,Font.BOLD,14));
set不透明(true);
RenderComponent.setBorder(BorderFactory.CreateRaisedBevelOrder());
设置水平对齐(JLabel.CENTER);
header.addMouseListener(渲染器组件);
}
}
设置列(列);
renderComponent.setText(value.toString());
//setboorder(UIManager.getBorder(“TableHeader.cellBorder”);
返回渲染器组件;
}
受保护的void setColumn(int列){
this.column=列;
}
public int getColumn(){
返回列;
}
受保护的无效handleClickEvent(MouseeEvent e){
如果(鼠标按下){
鼠标按下=错误;
JTableHeader=(JTableHeader)(e.getSource());
JTable tableView=header.getTable();
TableColumnModel columnModel=tableView.getColumnModel();
int viewColumn=columnModel.getColumnIndexAtX(e.getX());
int column=tableView.convertColumnIndexToModel(viewColumn);
如果(viewColumn==this.column&&e.getClickCount()==1&&column!=-1){
doClick();
}
}
}
公共无效mouseClicked(MouseEvent e){
handleClickEvent(e);
((JTableHeader)e.getSource()).repaint();
}
公共无效鼠标按下(MouseEvent e){
鼠标按下=真;
}
公共无效MouseEvent(MouseEvent e){
}
公共无效鼠标事件(鼠标事件e){
}
公共无效mouseExited(MouseEvent e){
}
}
类MyItemListener实现ItemListener
{
公共无效itemStateChanged(ItemEvent e){
对象源=e.getSource();
if(sourceinstanceof AbstractButton==false)返回;
选中布尔值=e.getStateChange()==ItemEvent.SELECTED;
对于(int x=0,y=DailydatasTbl.getRowCount();x
更改代码头.setBORDORDER(BorderFactory.createRaisedBevelBorder())后;底部有边框,但右边的边框还是空的。我编辑了这个问题,这样英语就更好了,里面只有一个问题。我还添加了一个相关标签,并将标题更改为更准确。