鉴于
import javax.swing.*;
public class TestCornerComponent {
public static void main(String args[]) {
JTable table = new JTable();
final JScrollPane scrollPane = new JScrollPane(table);
/* button to put in corner */
JButton cornerButton = new JButton("#");
scrollPane.setCorner(JScrollPane.UPPER_TRAILING_CORNER,
cornerButton);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Test corner component");
frame.getContentPane().add(scrollPane);
frame.setVisible(true);
}
});
}
}
无论JTable是否为空,如何使cornerButton始终可见?
我看到SwingX中的JXTable实现了这一点,但我无法从源代码中解读它是如何完成的。
由于
答案 0 :(得分:3)
我的问题是,当ScrollPane的列标题视口中存在某些内容时,JScrollPane仅显示该按钮。
我认为这只是问题的一半。您需要视口中的组件占用一些空间。
我已经尝试在那里放一个空的JPanel,但这似乎不起作用
尝试视口中的空JPanel以及列标题中的面板:
import java.awt.*;
import javax.swing.*;
public class TestCornerComponent {
public static void main(String args[])
{
final JScrollPane scrollPane = new JScrollPane();
/* button to put in corner */
JButton cornerButton = new JButton("#");
scrollPane.setCorner(JScrollPane.UPPER_TRAILING_CORNER, cornerButton);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JPanel column = new JPanel();
column.setPreferredSize( new Dimension(100, cornerButton.getPreferredSize().height) );
scrollPane.setColumnHeaderView( column );
JPanel view = new JPanel();
view.setPreferredSize( new Dimension(100, 100) );
scrollPane.setViewportView( view );
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Test corner component");
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
});
}
}