我正在制作一个GUI,它在一个大型JPanel上方显示三个JToolBars.这些工具栏总体上非常大,所以我使用FlowLayout使它们在到达JFrame边界时换行到下一行.问题是,当它们换行到下一行时,它们会被下面的JPanel隐藏起来.我希望我可以强制包含工具栏的JPanel增长到足以显示所有工具栏.
有没有办法做到这一点?或者是否有其他方法可以使这些工具栏可见?
我找到了三种方法来填充我的JFrame框架= new JFrame("...")createContentPanel返回一个JPanel,createToolBar返回一个ToolBar.
frame.add(this.createToolBar(), BorderLayout.PAGE_START); //this works and puts the ToolBar above and the ContentPanel under it<br>
frame.add(this.createContentPanel(), BorderLayout.CENTER);
frame.setContentPane(this.createContentPanel()); //this lets the JToolBar hover over the ContentPanel
frame.getContentPane().add(this.createToolBar());
frame.getContentPane().add(this.createContentPanel()); //this only puts the last one into the JFrame
frame.getContentPane().add(this.createToolBar());
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么我应该使用getContentPane()/ setContentPane()方法,如果我可以使用一个简单的frame.add(...)来填充我的框架.
我在Swing JToolBar上创建了一个下拉菜单.但它并没有按照我想要的方式创造行为.我的目标是像Firefox的"智能书签"按钮一样工作.
当用户选择菜单项时,它会消失:正确!
当用户按下ESC时,它会消失:CORRECT!
当用户点击菜单外的主框架中的某处时,它会消失:正确!
但是当用户第二次点击显示下拉菜单的按钮时,它不会消失:INCORRECT ... :-(
我的问题是如何添加这种行为,当点击第二次显示菜单的按钮时,它确实消失了.
这是我目前的代码,来自Mac上的Java 6:
import javax.swing.*;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class ScratchSpace {
public static void main(String[] arguments) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Toolbar with Popup Menu demo");
final JToolBar toolBar = new JToolBar();
toolBar.add(createMoreButton());
final JPanel panel = new JPanel(new BorderLayout());
panel.add(toolBar, BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(600, 400));
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
private static AbstractButton createMoreButton() { …
Run Code Online (Sandbox Code Playgroud) 我在Swing JToolBar中的按钮中显示来自FontAwesome集合的某些字形时遇到问题.这是一个截图(注意右侧工具栏中的顶部按钮不是一个漂亮的图标,而是显示三个空矩形):
重现这个的代码(至少在我的Mac上)是:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;![enter image description here][2]
import java.awt.FontFormatException;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar;
public class TestFontAwesome {
public static void main(String[] args) {
new TestFontAwesome();
}
public TestFontAwesome() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try (InputStream is = TestFontAwesome.class.getResourceAsStream("/fontawesome-webfont_old.ttf")) {
Font font = Font.createFont(Font.TRUETYPE_FONT, is);
font = font.deriveFont(Font.PLAIN, 24f);
JToolBar toolBar = new JToolBar(JToolBar.VERTICAL);
JButton button1 = new JButton("\uf00e");
button1.setFont(font);
toolBar.add(button1);
JButton button2 = new JButton("\uf01e"); …
Run Code Online (Sandbox Code Playgroud) 我是Java Swing的新手,我遇到了一些问题.
因此,如下面的代码所示,我有一个JFrame,我调用MainPanel类来创建一个面板并添加一个带按钮的ToolBar.按下按钮时,它会向面板添加一个按钮.在您调整窗口大小之前单击按钮时没有显示问题(在我的情况下,我只需手动拖动屏幕使其变大).
public class Main {
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("MathMaker");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create the menu bar. Make it have a green background.
//MainToolBar mainTB = new MainToolBar();
MainPanel mainPanel = new MainPanel();
frame.getContentPane().add(mainPanel.getGUI(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
} …
Run Code Online (Sandbox Code Playgroud)如何禁用拖动JToolbar?我把它放在BorderLayout中.我试着找一个方法.有这样的方法吗?谢谢
任何人都可以帮助解决这个问题我正在尝试创建一个JToolBar,我想要修复其所有组件的大小和位置.我已经尝试了一些不同的布局管理器,但是当它们重新调整大小时,它们都会对组件进行居中和/或重新调整大小.
这是一个使用GridbagLayout的例子,我也使用了默认的布局管理器,toolbar.add(component)
但结果是一样的:'
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;
public class ToolBarTest extends JFrame
{
private JToolBar toolbar;
private JPanel mainPanel;
private JPanel toolBarPanel;
private JButton aButton;
private JCheckBox aCheckBox;
private JList aList;
private Box toolbarBox;
private GridBagConstraints toolbarConstraints;
private GridBagLayout toolbarLayout;
private JLabel shapeLabel;
private JComboBox<ImageIcon> shapeChooser;
private JLabel colorLabel;
private JComboBox colorChooser;
private String colorNames[] = { "Black" , "Blue", "Cyan", "Dark Gray",
"Gray", "Green", "Light Gray", "Magenta", "Orange",
"Pink", "Red", …
Run Code Online (Sandbox Code Playgroud) 我需要添加一个简单的间隙/空间/边距,以便在这两个按钮之间留出空间。不幸的是我不能让它工作。谁能给我一些建议?
它基于BorderLayout
,按钮位于JToolBar
我有一个带背景的jPanel,我想在其上添加一个JToolbar.
我的问题是当我添加JToolbar时,它的默认背景很烦,我将它设置为不透明,但没有效果.
我想删除它的默认背景并使其透明.
我阅读了以下文章,但没有帮助:
JToolbar背景图像
这是我的代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JToolBar;
public class Toolbar extends JToolBar {
private JButton manage;
private JButton add;
private JButton search;
private JButton exit;
public Toolbar() {
super();
manage = new JButton();
add = new JButton();
search = new JButton();
exit = new JButton();
ImageIcon icon = new ImageIcon("pics/Add-01.png");
Image img = icon.getImage();
Image newImage = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
add.setIcon(new ImageIcon(newImage));
setOpaque(false);
setBackground(Color.RED);
add(add); …
Run Code Online (Sandbox Code Playgroud) 我的java swing应用程序有一些在JMenuItems和JButtons中使用的AbstractActions.我想把它们中的一些放在JButton里面的JToolbar中,但我只想要显示图标,而不是文本.有最佳实践方法吗?