Как сделать угловой компонент всегда видимым в 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);
            }
        });
    }
}
Другие вопросы по тегам