Ниже приведен код простого макета, созданного с использованием нескольких вложенных JSplitPanes
.Разрешить вложенные JSplitPanes контролировать родительские JSplitPanes
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
public class CDBurner extends JFrame {
private static final long serialVersionUID = -6027473114929970648L;
JSplitPane main, folder, rest;
JPanel centeral, folders, favourites, tasks;
JLabel label;
private CDBurner() {
super("Dan's CD Burner");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(1, 1));
getContentPane().setBackground(Color.black);
createLayout();
pack();
setMinimumSize(getSize());
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
setVisible(true);
requestFocus();
}
private void createLayout() {
createPanels();
rest = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centeral, tasks);
rest.setResizeWeight(1);
rest.setContinuousLayout(true);
rest.setOneTouchExpandable(true);
folder = new JSplitPane(JSplitPane.VERTICAL_SPLIT, favourites, folders);
folder.setResizeWeight(0.35);
folder.setContinuousLayout(true);
folder.setOneTouchExpandable(true);
main = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, folder, rest);
main.setResizeWeight(0);
main.setContinuousLayout(true);
main.setOneTouchExpandable(true);
getContentPane().add(main);
}
private void createPanels() {
createFolders();
createCenter();
createTaskSpool();
createFavourites();
}
private void createFolders() {
folders = new JPanel(new GridLayout(1, 1));
label = new JLabel("Folder");
folders.setMinimumSize(new Dimension(300, 100));
folders.add(label);
}
private void createCenter() {
centeral = new JPanel(new GridLayout(1, 1));
label = new JLabel("Central");
centeral.add(label);
centeral.setMinimumSize(new Dimension(300, 100));
}
private void createTaskSpool() {
tasks = new JPanel(new GridLayout(1, 1));
label = new JLabel("Task");
tasks.setMinimumSize(new Dimension(300, 100));
tasks.add(label);
}
private void createFavourites() {
favourites = new JPanel(new GridLayout(1, 1));
label = new JLabel("Fav");
favourites.setMinimumSize(new Dimension(300, 100));
favourites.add(label);
}
public static void main(String[] args) {
new CDBurner();
}
}
Благодаря линии rest.setResizeWeight(1);
вы можете перетащить main (JSplitPane)
разделитель вправо, и он будет сокращаться tasks JPanel
к пока оба JPanels
в rest
являются минимальным размером. Однако, если вы попытаетесь сделать наоборот, ничего не произойдет. См. Изображения ниже, чтобы увидеть проблему.
Если gui выглядит так, вы можете перетащить разделитель main
.
И вы получите результат этого.
Однако если это выглядит, и вы пытаетесь перетащить rest
делитель ничего не происходит.
Это происходит потому, что обе стороны rest JSplitPane
уже при их минимальном размере.
Вопрос
Как я могу сделать это так, что, когда я перетащить rest
делитель это производит main JSplitPane
так, что обе операции показано выше изображения возможны?
Спасибо за ответ, однако, похоже, он не работает так хорошо. Остальной делитель теперь очень нервный и случайным образом перестает двигаться, и вам нужно его повторно щелкнуть. Хотя, это похоже на правильный путь, чтобы спуститься. Я посмотрю на это – Dan