【发布时间】:2014-09-29 14:10:13
【问题描述】:
我对 Java Swing 还很陌生,但遇到了一些问题。
- 作为一个附带问题,当制作一个相当大的 Java Swing 应用程序时,拆分代码的最佳方法是什么? 在我的情况下,我希望有一个布局与 Microsoft Word 一样的应用程序,其中有一个充满按钮的 JToolBar 和一个主 JPanel,其中根据工具栏中按下的按钮进行更改。
-
如下面的代码所示,我有一个 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(); } }); } }公共类 MainPanel 实现 ActionListener{ JPanel mPanel; JToolBar mToolBar; JButton addQuestion; 公共主面板(){ mPanel = new JPanel(new BorderLayout()); mToolBar = 新的 JToolBar(); addQuestion = new JButton("test");addQuestion.addActionListener(this); mPanel.setLayout(new BorderLayout()); mPanel.setBackground(new Color(248, 213, 131)); mPanel.setPreferredSize(new Dimension(200, 180)); mToolBar.add(addQuestion); mPanel.add(mToolBar, BorderLayout.PAGE_START); } public JComponent getGUI() { return mPanel; } @Override public void actionPerformed(ActionEvent e) { JButton temp = new JButton("temp"); mPanel.add(temp); }}
【问题讨论】:
-
..setPreferredSize(new Dimension(200, 180));Swing GUI 可能必须在不同的平台上工作,使用不同的 PLAF,在不同的屏幕尺寸和分辨率上使用不同的字体大小默认设置。因此,它们不利于组件的精确放置。而是使用布局管理器,或 combinations of layout managers 以及 layout padding and borders 用于空白。
标签: java swing jpanel jbutton jtoolbar