Ich bin völlig neu in der Verwendung der GUI in Java, so habe ich ein wenig Mühe herauszufinden, wie alles auszurichten, was ich brauche. Ich habe in meinem JFrame Panels, die ich ausrichten muss (Eins nach links, eins nach rechts) und ein paar Buttons in einem der Panels, die ich im Panel zentrieren muss. Hier ist mein Code.Wie kann ich Elemente in JPanels/JFrames ausrichten?
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));
}
}
}
Wie Sie sehen können, die zweite JPanel (Gitter) Linie nicht mit der rechten Seite des Rahmens nach oben, und die Tasten innerhalb iconTray auch nicht zentrieren. Mir ist klar, dass es sich beide um einfache Layout-Korrekturen handelt, aber ich habe keine Ahnung, wo ich anfangen soll.
Danke, das hat mir sehr geholfen. Es gibt eine Sache, die ich vergessen habe zu fragen, und das ist, wie man Tasten vertikal anordnet - ich muss später etwas hinzufügen. – user2067364
+1 für 'pack()'; mehr [hier] (http://stackoverflow.com/a/14927280/230513). – trashgod
Sie müssen einen anderen Layout-Manager verwenden. Für eine sehr einfache Ausrichtung können Sie 'GridLayout' oder' BoxLayout' verwenden, aber für etwas Komplexeres empfehle ich die Verwendung von 'GridBadLayout' oder' MiGLayout'. Googeln Sie das einfach. –