java—如何将jtoolbar设置为帧的大小

sz81bmfz  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(457)

我正在制作一个音乐跟踪器的用户界面,我已经做了一些基本的设置。我是新的用户界面,所以我还没有弄清楚所有关于swing图形的东西。
我现在最大的问题是,我不能得到工具栏大小正确,所以它甚至没有出现。如何将其大小设置为jframe的宽度?
maininterface在主类中初始化。

package userInterface;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.JTree;

/**
 *
 * @author Edward Jenkins
 */
public class MainInterface extends JFrame {

    // constants
    public static final int DEFAULT_WINDOW_WIDTH = 1080;
    public static final int DEFAULT_WINDOW_HEIGHT = 720;    

    // instance variables
    int screenWidth;
    int screenHeight;
    JMenuBar menuBar;
    JMenu fileMenu, editMenu, toolsMenu;
    GridBagLayout gbl;
    GridBagConstraints gbc;
    JTree tree;
    JTable trackerTable;
    JScrollPane tableScroll;
    Container toolBarContainer;
    JToolBar toolBar;
    JButton saveButton, loadButton, pauseButton, stopButton, backPatternButton, 
            forthPatternButton, playButton, recordButton, repeatSongButton;
    JTabbedPane tabbedPane;

    int numberOfChannels;

    // constructor
    public MainInterface() {
        getScreenSize();
        this.setTitle("Synth Tracker 1.0");
        this.setLayout(gbl);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds((int)(screenWidth / 2) - (int)(DEFAULT_WINDOW_WIDTH / 2),
                (int)(screenHeight / 2) - (int)(DEFAULT_WINDOW_HEIGHT / 2),
                DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT);
        addComponents();
        this.setVisible(true);
    }

    // get screen size
    private void getScreenSize() {
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
                .getDefaultScreenDevice();
        screenWidth = gd.getDisplayMode().getWidth();
        screenHeight = gd.getDisplayMode().getHeight();
    }

    // set all components
    private void addComponents() {

        //Menu bar and its options
        menuBar = new JMenuBar();
        fileMenu = new JMenu("File");
        editMenu = new JMenu("Edit");
        toolsMenu = new JMenu("Tools");

        // add menues to menuBar
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(toolsMenu);
        this.setJMenuBar(menuBar);

        // set the grid and constraint
        gbl = new GridBagLayout();
        gbc = new GridBagConstraints();

        // set the row 1 of the grid
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 2;

        // set toolbar container
        toolBarContainer = this.getContentPane();

        // set the toolbar
        toolBar = new JToolBar();
        toolBar.setRollover(true);
        toolBar.setFloatable(false);

        // set the buttons in the toolbar
        saveButton = new JButton();
        saveButton.setIcon(
                new ImageIcon("src/userInterface/icons/save_icon.png"));
        saveButton.setToolTipText("Save"); 

        toolBar.add(saveButton);

        add(toolBar, gbc);

    }

    public void setNumberOfChannels(int numberOfChannels) {
        this.numberOfChannels = numberOfChannels;
    }
}
5ktev3wc

5ktev3wc1#

而不是 GridBagLayout ,使用更简单的布局,并使用辅助 JPanel s。继续使用 GridBagLayout ,特别是作为一个新手,我建议使用一个图形界面来处理约束,以使它们恰到好处(netbeans有一个很好的 GridBagLayout 图形编辑器和代码生成器)。
我建议使用 BorderLayout ,并将工具栏放置在顶部(它将自动拉伸到全宽):

// within addComponents
setLayout(new BorderLayout());
getContentPane().add(toolBar, BorderLayout.NORTH);

在您的情况下,您似乎忘记了设置 JFrameGridBagLayout -但即便如此,以我的经验,你还是应该更喜欢筑巢 JPanel 将所有接口元素添加到同一组件中。使用单独的jpanel可以更容易地进行布局、测试,并且如果您希望在保持现有块一致的同时更改总体布局,那么可以提供灵活性。

相关问题