Java GUI自动resize

这是绘制GUI的地方(注意,该类扩展了JFrame)。

public Cache() { SubstanceColorChooserUI col = new SubstanceColorChooserUI(); while (mode == 0); setResizable(false); setTitle("Cache"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 483, 374); setLocationRelativeTo(null); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout()); textField = new JTextField(); textField.setBounds(10, 11, 328, 20); contentPane.add(textField); textField.setColumns(10); JButton btnLoadCache = new JButton("Load cache"); btnLoadCache.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { String loc = textField.getText(); if (loc.equals("")) { JOptionPane.showMessageDialog(Cache.this, "Please specify a location for the cache.", "Unable to load", JOptionPane.ERROR_MESSAGE); return; } if (!loc.endsWith("\\")) loc = loc + "\\"; cache = new Store(loc); loadImages(); } catch (Exception e) { JOptionPane.showMessageDialog(Cache.this, "Cache failed to initialize.\n" + e.getMessage(), "Unable to load", JOptionPane.ERROR_MESSAGE); } } }); btnLoadCache.setBounds(351, 9, 112, 23); contentPane.add(btnLoadCache); JSplitPane splitPane = new JSplitPane(); splitPane.setDividerLocation(150); splitPane.setContinuousLayout(true); splitPane.setBounds(10, 44, 453, 279); contentPane.add(splitPane); JPanel panellie = new JPanel(); panellie.setLayout(new BorderLayout(0, 0)); panel = new ImagePanel(null); scrollPane_1 = new JScrollPane(); panellie.add(scrollPane_1, "Center"); scrollPane_1.setViewportView(panel); splitPane.setRightComponent(panellie); JPanel panel_1 = new JPanel(); splitPane.setLeftComponent(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(); panel_1.add(scrollPane, BorderLayout.CENTER); model = new DefaultListModel(); list = new JList(model); list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent arg0) { if (arg0.getValueIsAdjusting()) return; ListedImage img = list.getModel().getElementAt(list.getSelectedIndex()); panel.setImage(img.getImage()); } }); scrollPane.setViewportView(list); progressBar = new JProgressBar(); progressBar.setStringPainted(true); progressBar.setDoubleBuffered(true); progressBar.setBounds(10, 328, 453, 14); contentPane.add(progressBar); } 

当我将setResizeable设置为true并且我开始拖动程序变得越来越小时,我将如何制作它,如何在整个Frameresize时使框架内部的组件(按钮,标签等)resize

使用布局管理器而不是为每个组件设置边界。

它会随着程序的不同而变化,您希望组件的移动方式如何。

看看这个 ,并尝试看看哪种布局最适合您。

1.您可以使用setSize()方法设置JFrame大小

2.您可以通过设置isResizable(false)来选择固定JFrame大小

3.使用由NetBeans团队在2005年开发的GroupLayout,现在免费试用 Google提供的Windows Builder Pro 。 在这里,您可以选择GroupLayout,然后将组件拖放到JFrame中,即使您希望手动编辑GUI代码也是如此。