Как сделать угловой компонент всегда видимым в JScrollPane
Дано
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 или нет?
Я вижу, что JXTable в SwingX выполняет это, однако я не смог расшифровать из исходного кода, как это было сделано.
Спасибо
1 ответ
Решение
Моя проблема в том, что JScrollPane показывает кнопку только тогда, когда есть что-то в области просмотра заголовка столбца ScrollPane.
Я думаю, что это половина проблемы. Вам нужен компонент в области просмотра, чтобы занять некоторое место.
Я пытался вставить туда пустую 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);
}
});
}
}