Я новичок в 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(); } }); } }
public class MainPanel implements ActionListener{ JPanel mPanel; JToolBar mToolBar; JButton addQuestion; public MainPanel() { mPanel = new JPanel(new BorderLayout()); mToolBar = new 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 могут работать на разных платформах, используя разные PLAF, на экранах разных размеров и разрешений с разными настройками по умолчанию для размера шрифта. Как таковые, они не способствуют точному размещению компонентов. Вместо этого используйте менеджеры компоновки или комбинации менеджеров компоновки, а также отступы макета и границы для пустого пространства. - person Andrew Thompson   schedule 07.08.2014