Граница JScrollPane перекрывается на границе JTable

#java #swing #jtable #border #jscrollpane

#java #качать #jtable #граница #jscrollpane

Вопрос:

У меня есть a JTable внутри a JScrollPane , и я пытаюсь скрыть ViewPortBorder JScrollPane его . Для этого я установил для его границы пустую границу, но похоже, что она рисует пустую границу на внешней границе JTable (левая граница первого столбца).

Как я могу скрыть JScrollPane границу, не скрывая JTable границу? Проблема только в левой части, границы не перекрываются с правой стороны.

 public static void main(String[] args) {
    String[] columnNames = {"First Name",
            "Last Name",
            "Sport",
            "# of Years",
    "Vegetarian"};

    Object[][] data = {
            {"Kathy", "Smith",
                "Snowboarding", new Integer(5), new Boolean(false)},
                {"John", "Doe",
                    "Rowing", new Integer(3), new Boolean(true)},
                    {"Sue", "Black",
                        "Knitting", new Integer(2), new Boolean(false)},
                        {"Jane", "White",
                            "Speed reading", new Integer(20), new Boolean(true)},
                            {"Joe", "Brown",
                                "Pool", new Integer(10), new Boolean(false)}
    };

    JTable table = new JTable(data, columnNames);   
    JScrollPane scroll = new JScrollPane(table);

    Border border = BorderFactory.createEmptyBorder(0, 0, 0, 0);
    scroll.setViewportBorder(border);
    scroll.setBorder(border);

    JPanel panel = new JPanel();
    panel.add(scroll);

    JFrame frame = new JFrame();
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
}
  

Ответ №1:

JTable не имеет границы, то, что вы видите, — это граница, предоставляемая панелью прокрутки

(Без границы / с границей)

введите описание изображения здесь

На самом деле это (одна из причин), почему в левой части таблицы нет линии сетки 😉

Что вы могли бы сделать, это применить a MatteBorder к таблице

 Color color = table.getGridColor();
table.setBorder(new MatteBorder(0, 1, 0, 0, color));
  

(Без границы / с границей)

введите описание изображения здесь

Ответ №2:

Вы правы, когда устанавливаете JScrollPane границу на пустую границу. Однако то, что вы видите на левой границе вашей таблицы, — это просто способ JTable рисования элементов. Вы заметите, что если вы просто добавите объект сам JTable по себе, не помещая его в область прокрутки, он рисует его точно так же.

Если вы хотите нарисовать линию в левой части таблицы, вам нужно вручную установить границу.