0
모든 것을 시도했지만 JTable 헤더 안에 JButton을 가져올 수 없습니다. 내가 거기에 표시하고 마우스 수신기를 사용하여 클릭을 트래킹 할 수 있었지만 시각적 인 클릭 효과는 없습니다. 누군가가 이것을하는 올바른 방법으로 간단한 예제를 제공 할 수 있습니까?클릭 효과가있는 JTable 헤더 안에 JButton을 만드는 방법은 무엇입니까?
모든 것을 시도했지만 JTable 헤더 안에 JButton을 가져올 수 없습니다. 내가 거기에 표시하고 마우스 수신기를 사용하여 클릭을 트래킹 할 수 있었지만 시각적 인 클릭 효과는 없습니다. 누군가가 이것을하는 올바른 방법으로 간단한 예제를 제공 할 수 있습니까?클릭 효과가있는 JTable 헤더 안에 JButton을 만드는 방법은 무엇입니까?
이런 식으로 사용해보세요. 이 코드는 JToggleButton과 함께 시각 효과를 제공합니다. 기본적으로
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class Test {
private static JTable table;
public static void main(String[] args) {
table = new JTable(new Object[][]{{1,2},{2,3}},new Object[]
{"test", "test2"});
TableColumn column = table.getColumnModel().getColumn(0);
column.setHeaderRenderer(new BtnRenderer(column.getHeaderValue()));
column = table.getColumnModel().getColumn(1);
column.setHeaderRenderer(new BtnRenderer(column.getHeaderValue()));
table.getTableHeader().addMouseListener(getHeaderMouseListener());
JFrame f = new JFrame();
f.add(new JScrollPane(table));
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
private static MouseListener getHeaderMouseListener() {
return new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
if(arg0.getButton() == 1){
int columnAtPoint =
table.columnAtPoint(arg0.getPoint());
/* Get the header portion of the table, and its column model */
JTableHeader header = table.getTableHeader();
TableColumnModel columnModel = header.getColumnModel();
TableColumn column = columnModel.getColumn(columnAtPoint);
BtnRenderer headerRenderer =
(BtnRenderer) column.getHeaderRenderer();
headerRenderer.actionPerformed();
} else {
super.mousePressed(arg0);
}
}
};
}
}
class BtnRenderer implements TableCellRenderer {
private JToggleButton btn;
public BtnRenderer(Object headerValue) {
btn = new JToggleButton();
btn.addActionListener(System.out::println);
btn.setText(headerValue.toString());
}
@Override
public Component getTableCellRendererComponent(
JTable arg0,
Object arg1,
boolean arg2,
boolean arg3,
int arg4,
int arg5) {
return btn;
}
public void actionPerformed() {
btn.setSelected(!btn.isSelected());
}
}
JTableHeader에이 편집기에만 렌더러를 지원하지 않습니다, 렌더러는 그림 만 환상이 아니라 실제 JComponent의,,, JTableHeader에있는 JCheckBox에 여기 아무것도 페인트하는 방법에 대해 뭔가를 해결할 수 없는지 확인 검색 시뮬레이션 JButton.isPressed/isArmed/isSelected – mKorbel
이 [예제] (http://stackoverflow.com/a/7137801/230513) 변경 내용을 나타내는 텍스트를 변경합니다. – trashgod