Ich bin ziemlich neu in Java und ich bin bei einem vollständigen Verlust. Ich versuche ein einfaches Programm zu erstellen, das einen Kreis zeichnet und seine Eigenschaften auf dem Bildschirm ausgibt. Funktionell funktioniert das Programm gut, aber das Layout der JPanels ist deaktiviert. Aus irgendeinem Grund gibt es eine Lücke zwischen dem JPanel, das die Schaltfläche "Draw Me" enthält und der JPanel, die den Kreis enthält. Auch wenn ich die Höhe des Programms verändere, verschwindet die Lücke nicht. Ebenso sind die Etiketten innerhalb des Programms nicht nach links ausgerichtet, sie sitzen aus irgendeinem seltsamen Grund dezentriert, das Entfernen der Grenze scheint nicht zu helfen. Ich bin fest ...Ausrichtung von JPanels
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
public class MainPanel extends JPanel {
private JPanel userHelpSubPanel;
private JPanel inputSubPanel;
private JPanel buttonSubPanel;
private JPanel drawSubPanel;
private JPanel resultsSubPanel;
private JLabel userHelpLabel;
private JLabel diameterLabel;
private JLabel circumferenceLabel;
private JLabel areaLabel;
private JButton drawButton;
private JTextField inputTextField;
private float radius;
public MainPanel() {
radius = 0;
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
userHelpSubPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
inputSubPanel = new JPanel();
inputSubPanel.setLayout(new BoxLayout(inputSubPanel, BoxLayout.Y_AXIS));
drawSubPanel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.draw(new Ellipse2D.Double(150, 20, radius * 2, radius * 2));
}
};
resultsSubPanel = new JPanel();
resultsSubPanel.setLayout(new BoxLayout(resultsSubPanel, BoxLayout.Y_AXIS));
buttonSubPanel = new JPanel();
userHelpLabel = new JLabel();
userHelpLabel.setText("Enter the radius of the ellipse: ");
inputTextField = new JTextField();
inputTextField.setMaximumSize(new Dimension(Integer.MAX_VALUE, inputTextField.getPreferredSize().height));
drawButton = new JButton("Draw Me");
drawButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MainPanel.this.radius = Float.parseFloat(inputTextField.getText());
diameterLabel.setText(String.format("Diameter: %.1f", 2 * radius));
circumferenceLabel.setText(String.format("Circumference: %.1f", 2 * Math.PI * radius));
areaLabel.setText(String.format("Area: %.1f", Math.PI * Math.pow(radius, 2)));
drawSubPanel.repaint();
}
});
circumferenceLabel = new JLabel("Circumference: N/A");
diameterLabel = new JLabel("Diameter: N/A");
areaLabel = new JLabel("Area: N/A");
userHelpSubPanel.add(userHelpLabel);
inputSubPanel.add(inputTextField);
buttonSubPanel.add(drawButton);
resultsSubPanel.add(diameterLabel);
resultsSubPanel.add(circumferenceLabel);
resultsSubPanel.add(areaLabel);
add(userHelpLabel);
add(inputSubPanel);
add(buttonSubPanel);
add(drawSubPanel);
add(resultsSubPanel);
}
}
Und hier ist, wie es aussieht ....
Verwenden Sie GridBagLayout - es ist am besten für die Aufgabe, die Sie haben. https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html – mko