如何将 JToolBar 设置为框架的大小
How to set a JToolBar to the size of the frame
我正在为我正在开发的音乐追踪器制作用户界面,并且我已经设置了一些基础知识。我是用户界面的新手,所以我还没有弄清楚有关 swing 图形的所有内容。
我现在最大的问题是我无法正确调整工具栏的大小,所以它甚至没有出现。
如何将其大小设置为始终为 JFrame 的宽度?
MainInterface 在 main class.
中初始化
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;
}
}
而不是 GridBagLayout
,使用更简单的布局并使用辅助 JPanel
嵌套它们。要继续使用 GridBagLayout
,特别是作为新手,我建议使用图形界面来处理约束以使它们恰到好处(NetBeans 有一个很好的 GridBagLayout
图形编辑器和代码生成器)。
我建议使用 BorderLayout
,并将工具栏放在顶部(它会自动拉伸到全宽):
// within addComponents
setLayout(new BorderLayout());
getContentPane().add(toolBar, BorderLayout.NORTH);
在您的情况下,您似乎忘记了将 JFrame
的布局设置为 GridBagLayout
- 但即便如此,根据我的经验,您应该更喜欢嵌套 JPanel
s 将所有界面元素添加到同一个组件中。使用单独的 JPanel 可以更轻松地进行布局、测试,并在您想要更改总体布局同时保持现有块一致时提供灵活性。
我正在为我正在开发的音乐追踪器制作用户界面,并且我已经设置了一些基础知识。我是用户界面的新手,所以我还没有弄清楚有关 swing 图形的所有内容。
我现在最大的问题是我无法正确调整工具栏的大小,所以它甚至没有出现。 如何将其大小设置为始终为 JFrame 的宽度?
MainInterface 在 main class.
中初始化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;
}
}
而不是 GridBagLayout
,使用更简单的布局并使用辅助 JPanel
嵌套它们。要继续使用 GridBagLayout
,特别是作为新手,我建议使用图形界面来处理约束以使它们恰到好处(NetBeans 有一个很好的 GridBagLayout
图形编辑器和代码生成器)。
我建议使用 BorderLayout
,并将工具栏放在顶部(它会自动拉伸到全宽):
// within addComponents
setLayout(new BorderLayout());
getContentPane().add(toolBar, BorderLayout.NORTH);
在您的情况下,您似乎忘记了将 JFrame
的布局设置为 GridBagLayout
- 但即便如此,根据我的经验,您应该更喜欢嵌套 JPanel
s 将所有界面元素添加到同一个组件中。使用单独的 JPanel 可以更轻松地进行布局、测试,并在您想要更改总体布局同时保持现有块一致时提供灵活性。