Dưới đây là mã cho bố cục đơn giản được tạo bằng cách sử dụng một số lồng nhau JSplitPanes
.Cho phép JSplitPanes lồng nhau để kiểm soát JSplitPanes gốc
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();
}
}
Do dòng rest.setResizeWeight(1);
bạn có thể kéo chia main (JSplitPane)
sang bên phải và nó sẽ thu nhỏ tasks JPanel
cho đến khi cả hai JPanels
trong rest
là kích thước tối thiểu. Tuy nhiên, nếu bạn cố gắng làm điều ngược lại thì không có gì xảy ra. Xem hình ảnh bên dưới để xem sự cố.
Nếu gui trông như thế này, bạn có thể kéo bộ chia main
.
Và bạn sẽ nhận được kết quả của việc này.
Tuy nhiên nếu nó trông như thế này và bạn cố gắng kéo rest
chia có gì xảy ra.
Điều này là do cả hai mặt của rest JSplitPane
đã ở kích thước tối thiểu của họ.
Các Câu hỏi
Làm thế nào tôi có thể làm cho nó để khi tôi kéo chia rest
nó ảnh hưởng các main JSplitPane
để cả hai hoạt động thể hiện trong những hình ảnh trên là có thể?
Cảm ơn bạn đã trả lời, tuy nhiên, dường như nó không hoạt động tốt. Phần chia tách còn lại hiện rất nhanh và ngẫu nhiên ngừng di chuyển và bạn phải nhấp lại vào đó. Mặc dù, điều này dường như là con đường đúng để đi xuống. Tôi sẽ xem xét nó – Dan