我一直堅持讓這個搖擺用戶界面按照我希望的方式行事。我撰寫了這個演示代碼來展示它正在做什么,現在我將解釋我希望它做什么。
我有一個 JFrame 和 3 個 JPanel

第二步:在頂部添加控制元件按鈕。定義按鈕面板:
class ControlsPane extends JPanel{
public ControlsPane(ActionListener listener) {
setOpaque(false);
JButton btnShowHide = new JButton("Show Drawer");
add(btnShowHide);
btnShowHide.addActionListener(listener);
JButton btnExit = new JButton("Exit");
add(btnExit);
btnExit.addActionListener(e-> System.exit(0));
}
}
并按照@camickr 的建議修改MainPane建構式以使用BorderLayout和添加按鈕面板:
MainPane(Image background) {
this.background = background;
size = new Dimension(background.getWidth(null), background.getHeight(null));
setLayout(new BorderLayout(5,5));
//action listener for show drawer button
ActionListener listener = e-> System.out.println("Show Drawer clicked");
add(new ControlsPane(listener), BorderLayout.PAGE_START);
}

現在把它帶到下一步(例如添加一個抽屜)。
uj5u.com熱心網友回復:
像這樣的東西?
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
JToolBar toolBar = new JToolBar(JToolBar.HORIZONTAL);
toolBar.setFloatable(false);
frame.add(toolBar, new GridBagConstraints(0, 0, 2, 3, 0, 1.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
JPanel drawer = new JPanel();
drawer.setBackground(Color.BLUE);
drawer.setOpaque(true);
drawer.setVisible(false);
JPanel content = new JPanel();
content.setBackground(Color.GREEN);
content.setOpaque(true);
frame.add(drawer, new GridBagConstraints(0, 1, 1, 2, 1, 1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(4, 4, 4, 4), 0, 0));
frame.add(content, new GridBagConstraints(1, 1, 1, 2, 1, 1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(4, 4, 4, 4), 0, 0));
Action toggleDrawer = new AbstractAction("Toggle Drawer") {
@Override
public void actionPerformed(ActionEvent e) {
drawer.setVisible(!drawer.isVisible());
frame.revalidate();
frame.repaint();
}
};
toolBar.add(new JButton(toggleDrawer));
frame.pack();
frame.setSize(300, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363968.html
