Ответ 1
Вам нужно добавить ограничения, чтобы указать макет, что делать с большим количеством места. В SSCCE добавьте следующие элементы:
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 0;
Я использую JTable и добавляю его к панели, которая использует gridbaglayout следующим образом:
JTable qdbs = new JTable(rowData, columnNamesVector);
qdbs.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
panel.add(qdbs, c);
Я не хочу, чтобы таблица находилась в панели прокрутки, но я хочу, чтобы таблица занимала всю ширину панели. Как бы это сделать?
SSCCE по запросу:
import javax.swing.*;
import java.awt.*;
public class Main{
public static void main(String[] args) {
new TestFrame();
}
public static class TestFrame extends JFrame{
public TestFrame() {
this.setTitle("SSCCE");
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10,10,10,10);
JTable testTable = new JTable(10,2);
panel.add(testTable, c);
this.add(panel);
this.pack();
this.setVisible(true);
}
}
}
Я бы хотел, чтобы эта таблица всегда занимала всю ширину панели (кроме вставки). В настоящее время таблица не изменяет размер при изменении размера кадра.
Вам нужно добавить ограничения, чтобы указать макет, что делать с большим количеством места. В SSCCE добавьте следующие элементы:
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 0;
import java.awt.*;
import javax.swing.*;
public class Test
{
public static void main(String args[]) throws Exception
{
JPanel panel = new JPanel( new GridBagLayout() );
JTable table = new JTable(5, 5);
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
panel.add(table, gbc);
JFrame frame = new JFrame();
frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
Если вам нужна дополнительная помощь, напишите SSCCE, который демонстрирует проблему.
c
- это GridBagConstraint
или что-то в этом роде, я полагаю? Самое простое - установить LayoutManager
в JPanel
на BorderLayout
, а затем просто добавить с ограничением BorderLayout.CENTER
.
hmmm
Алекс Блысковский написал panel.add(qdbs, c);
что неправильно, не так, никогда не делайте этого, вы забыли обернуть вас JTable в ScrollPane, а затем вы можете играть с некоторыми LayoutManagers, для соответствующих примеров для LayoutManagers проверьте GridBagConstraints для GrigBagLayout
Следующий кадр будет правильно изменять размер таблицы при изменении размера кадра.
public class Sandbox {
public static void main(String[] args) {
new TestFrame();
}
public static class TestFrame extends JFrame {
public TestFrame() {
this.setTitle("SSCCE");
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10, 10, 10, 10);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
JTable testTable = new JTable(10, 2);
panel.add(testTable, c);
this.add(panel);
this.pack();
this.setVisible(true);
}
}
}
Возможно, с помощью
GridBagConstraints.fill = GridBagContraints.BOTH;