[英]Dynamically adding toolbars in Java Swing GUI
我正在开发Java桌面应用程序。 我希望在GUI中,该用户可以动态添加任意数量的工具栏。 为了实现这一点,以下是我已经做过的事情:
现在,第一个工具栏上有一个名为“添加”的按钮,该按钮添加在“ toolbar1Panel”上,该按钮又添加到topPanel中。
现在,我已经实现了上述“添加”按钮的“ actionPerformed()”方法,如下所示:
// to add second toolbar Panel to the topPanel dynamically
topPanel.add(toolbar2Panel);
但是问题是它不起作用。 意味着没有工具栏添加到topPanel。
有什么我想念的吗?
该代码是Netbeans生成的,因此我认为它只会给其他人增加混乱,这就是为什么我没有在此处粘贴任何代码的原因。
在将另一个工具栏添加到BoxLayout之后,您可能需要(重新登录)验证面板。
我已经反复做过,但是我不理解3个左右方法调用背后的逻辑。 因此,我只尝试它们,直到找到了可行的方法:
topPanel.validate();
topPanel.invalidate();
topPanel.revalidate();
topPanel.layout();
(至少)其中之一应强制您的GUI重新计算其布局,使北面板更大,从而显示您添加的第二个(及后续)工具栏。
如果未指定顶部面板的布局,则可能是假设面板布局不正确。
向其中添加两个工具栏面板可能只是将第一个替换为第二个,或者忽略了第二个。
仅出于测试目的,将topPanel的布局设置为FlowLayout,然后重试。
我认为您在测试之前尝试做太多事情。 我采用的方法是从非常简单的内容开始,例如一个面板,一个静态标签。 如预期的那样,在出现时添加带有菜单项的工具栏。 那样有用吗。 然后逐步添加片段。
您很可能会遇到一个简单案例的问题,然后就可以解决,或者您可以在此处发布一个简单案例。
或者,作为起点,从网上挑选一些可行的例子。 削减它,然后建立您的情况。
有帮助吗? 这是您想要实现的目标吗?
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
public class AddingToolbars {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
AddingToolbars me = new AddingToolbars();
me.initGui();
}
});
}
private JPanel topPanel;
private JPanel mainPanel;
private JFrame frame;
private void initGui() {
frame = new JFrame();
mainPanel = new JPanel(new BorderLayout());
frame.setContentPane(mainPanel);
topPanel = new JPanel();
BoxLayout bLayout = new BoxLayout(topPanel,BoxLayout.Y_AXIS);
topPanel.setLayout(bLayout);
mainPanel.add(topPanel,BorderLayout.NORTH);
JButton addButton = new JButton("Add toolbar");
mainPanel.add(addButton,BorderLayout.CENTER);
addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
addNewToolBar();
}
});
frame.setSize(500,500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
protected void addNewToolBar() {
JToolBar tb = new JToolBar();
tb.add(new JButton("b1"));
tb.add(new JButton("b2"));
tb.add(new JButton("b3"));
topPanel.add(tb);
mainPanel.validate();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.