Я пытаюсь сделать несколько строк, которые заполняют всю рамку по вертикали и по горизонтали. Я попробовал это с GridLayout с GridBagLayout и теперь с BoxLayout - та же самая проблема! Белые линии путем изменения размера ...BoxLayout показывает белую линию внизу
Я не знаю, какой LayoutManager я должен использовать, потому что все имеют ту же проблему! Я хочу отзывчивый макет, поэтому мне нужно использовать LayoutManager и не могу исправить элементы. Кто-нибудь может мне помочь?
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout(new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
Результат кода является совершенным, но изменение размера кадра большой белой линии исчезают в в нижней части рамы ...
идеальный результат, но с большой жирной линией на дно:
Это мой первый вопрос с той же проблемой, но с GridBagLayout: https://stackoverflow.com/questions/35384891/gridbaglayout-shows-white-lines-at-top-and-bottom?noredirect=1#comment58475366_35384891
Как я могу сделать эти строки в Y-AXIS без этих белых линий, изменив размер рамки?
Пожалуйста, помогите мне - я отчаялся в течение 3-х дней с этой проблемой ...
Большое спасибо, Waldi
EDIT1: Весь код:
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test {
public static void addComponentsToPane(JFrame frame) {
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout(new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("GridBagLayout Source Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(frame);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
EDIT2: Решение от camickr:
Fi сначала загрузить класс RelativeLayout из https://tips4java.wordpress.com/2008/11/02/relative-layout/ (внизу страницы)
Второго шага заключается в написании кода для вашей проблемы -> в моем случае:
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill(true);
JPanel somePanel = new JPanel();
somePanel.setBackground(Color.BLACK);
somePanel.setLayout(rl);
JPanel blue = new JPanel();
blue.setBackground(Color.BLUE);
somePanel.add(blue, new Float(1));
parentPane.add(somePanel);
JPanel green = new JPanel();
green.setBackground(Color.GREEN);
somePanel.add(green, new Float(1));
parentPane.add(somePanel);
JPanel red = new JPanel();
red.setBackground(Color.RED);
somePanel.add(red, new Float(1));
parentPane.add(somePanel);
Используйте RelativeLayout как другие LayoutManagers!
Похоже, что-то с бортиками. – Zizouz212
Я не использую никаких границ. Даже ширина .setBorder (0, 0, 0, 0) белая линия показывает ... Любые идеи? – Waldi
Где вы использовали '.setBorder()'? Вы пробовали использовать его на рамах, панелях и т. Д.? Это может быть что-то с самим компоновкой. – Zizouz212