Tôi hoàn toàn mới sử dụng GUI trong java, vì vậy tôi gặp một chút khó khăn trong việc tìm ra cách sắp xếp mọi thứ mà tôi cần. Tôi phải đặt trong JFrame của tôi mà tôi cần phải căn chỉnh (Một bên trái, một bên phải) và một vài nút trong một trong các bảng mà tôi cần phải được căn giữa trong bảng điều khiển. Đây là mã của tôi.Làm cách nào để căn chỉnh các phần tử trong JPanels/JFrames?
package application;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.nio.*;
import java.util.*;
public class Main extends JPanel
{
public static void main(String[] args)
{
//set the ui to the native OS
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException | InstantiationException | IllegalAccessException
| UnsupportedLookAndFeelException e)
{
}
JFrame frame = new JFrame("Application Name");
Menu menu = new Menu();
JPanel iconPanel = new JPanel();
final JPanel grid = new JPanel(new FlowLayout());
JButton firewallButton = new JButton("Firewall");
JButton networkButton = new JButton("Network");
JButton printerButton = new JButton("Printer");
int iconPanelSizeX;
int iconPanelSizeY;
int gridSizeX;
int gridSizeY;
int gridPosition;
//frame setting
frame.setSize(800, 600);
frame.setMinimumSize(new Dimension(800, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
//add grid and iconPanel JPanels to the frame
frame.add(iconPanel);
iconPanel.add(firewallButton);
iconPanel.add(networkButton);
iconPanel.add(printerButton);
frame.add(grid);
//iconPanel settings
iconPanel.setBorder(BorderFactory.createLoweredSoftBevelBorder());
iconPanel.setBackground(Color.gray);
iconPanel.setLayout(new FlowLayout());
iconPanel.setSize(new Dimension(100, 600));
iconPanel.setVisible(true);
//grid setting
grid.setBackground(Color.red);
grid.setSize(new Dimension(700, 600));
grid.setVisible(true);
//this is for resizing components when the user resizes the window
int counter = 0;
while(counter == 0)
{
firewallButton.setSize(new Dimension(iconPanel.getWidth(), 50));
networkButton.setSize(new Dimension(iconPanel.getWidth(), 50));
printerButton.setSize(new Dimension(iconPanel.getWidth(), 50));
iconPanelSizeX = frame.getWidth()/10;
iconPanelSizeY = frame.getHeight();
gridSizeX = (frame.getWidth()/10) * 9;
gridSizeY = frame.getHeight();
iconPanel.setSize(new Dimension(iconPanelSizeX, iconPanelSizeY));
grid.setSize(new Dimension(gridSizeX, gridSizeY));
}
}
}
Như bạn có thể thấy, JPanel thứ hai (lưới) không thẳng hàng với cạnh bên phải của khung và các nút bên trong biểu tượngTray không tập trung vào. Tôi nhận ra đây là cả hai bản sửa lỗi bố cục đơn giản, nhưng tôi không biết phải bắt đầu từ đâu.
Cảm ơn, điều này đã giúp rất nhiều. Có một điều tôi quên hỏi, và đó là cách sắp xếp các nút theo chiều dọc - tôi phải thêm một số sau. – user2067364
+1 cho 'gói()'; thêm [ở đây] (http://stackoverflow.com/a/14927280/230513). – trashgod
Bạn sẽ phải sử dụng một số trình quản lý bố cục khác. Đối với căn chỉnh rất cơ bản, bạn có thể sử dụng 'GridLayout' hoặc' BoxLayout', nhưng đối với một cái gì đó phức tạp hơn, tôi đề nghị sử dụng 'GridBadLayout' hoặc' MiGLayout'. Chỉ cần google đó. –