1

我在分层窗格中有一组面板。我需要一个分隔符来将侧边栏与顶部栏和 tabbedPanel 分开。我留下了一个 10 像素的缓冲区来放置它。不幸的是,可能由于它是 JLayeredPane,我无法查看它。

有没有办法定义分隔符的 X 位置?因为这应该解决它。无论哪种方式,这是一个代码示例,我从中删除了大部分信息。

或者,提供一个完全不同的解决方案,只要我可以从侧边栏和其他两个面板中获得定义的拆分。我已经尝试将 BorderLayout.WEST 应用于侧边栏,但由于它是 JLayeredPane,它给了我错误。

lPane = new JLayeredPane();
lPane.setBounds(0, 0, 1024, 768);

calendarFrame = new JFrame ("Calendar Frame");
calendarFrame.setPreferredSize(new Dimension(1024, 768));
calendarFrame.setLayout(null);

//Prepare side bar
sideBar = new JPanel ();
sideBar.setLayout(null);
sideBar.setBounds(0, 0, 210, 768);

//Prepare top bar
topBar = new JPanel ();
topBar.setLayout(null);
topBar.setBounds(220, 0, 774, 50);

//Create tabbed pane
tabbedPane = new JTabbedPane();
tabbedPane.setBounds(220, 50, 774, 700);
//Tab code here, but not needed for questuion

calendarFrame.add(lPane, BorderLayout.CENTER);
lPane.add(sideBar, new Integer(0), 0);
lPane.add(Box.createHorizontalStrut(5));
lPane.add(new JSeparator(SwingConstants.VERTICAL));
lPane.add(Box.createHorizontalStrut(5));
lPane.add(topBar, new Integer(1), 0);
lPane.add(tabbedPane, new Integer(2), 0);
4

1 回答 1

2

编辑:

如果要创建固定的 10 像素间隙,

您可以使用

只是我的好奇心是你...

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public class EditableListExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public EditableListExample() {
        super("Editable List Example");
        String[] data = {"a", "b", "c", "d", "e", "f", "g"};
        JList list = new JList(data);
        JScrollPane scrollList = new JScrollPane(list);
        scrollList.setMinimumSize(new Dimension(100, 80));
        Box listBox = new Box(BoxLayout.Y_AXIS);
        listBox.add(scrollList);
        listBox.add(new JLabel("JList"));
        DefaultTableModel dm = new DefaultTableModel();
        Vector<String> dummyHeader = new Vector<String>();
        dummyHeader.addElement("");
        dm.setDataVector(strArray2Vector(data), dummyHeader);
        JTable table = new JTable(dm);
        table.setShowGrid(false);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane scrollTable = new JScrollPane(table);
        scrollTable.setColumnHeader(null);
        scrollTable.setMinimumSize(new Dimension(100, 80));
        Box tableBox = new Box(BoxLayout.Y_AXIS);
        tableBox.add(scrollTable);
        tableBox.add(new JLabel("JTable"));
        Container c = getContentPane();
        c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS));
        c.add(listBox);
        c.add(new JSeparator(SwingConstants.VERTICAL));
        //c.add(new JLabel("test"));
        //c.add(new JSeparator(SwingConstants.HORIZONTAL));
        c.add(tableBox);
        pack();
        setVisible(true);
    }

    private Vector<Object> strArray2Vector(String[] str) {
        Vector<Object> vector = new Vector<Object>();
        for (int i = 0; i < str.length; i++) {
            Vector<Object> v = new Vector<Object>();
            v.addElement(str[i]);
            vector.addElement(v);
        }
        return vector;
    }

    public static void main(String[] args) {
        final EditableListExample frame = new EditableListExample();
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
于 2012-04-01T20:31:11.507 回答