Я недавно начал работать над этим GUI для своего класса CS, и по какой-то причине полученный мной вывод совершенно не согласуется и не имеет никакого смысла.
Вот пример того, что я имею в виду:
В моем коде у меня есть определенные ограничения для моих кнопок, которые используют GridBagLayout.
GridBagConstraints countrytextRestraints = new GridBagConstraints();
countrytextRestraints.gridx = 1;
countrytextRestraints.gridy = 30;
GridBagConstraints country1restraints = new GridBagConstraints();
country1restraints.gridx = 2;
country1restraints.gridy = 30;
GridBagConstraints country2restraints = new GridBagConstraints();
country2restraints.gridx = 3;
country2restraints.gridy = 30;
GridBagConstraints country3restraints = new GridBagConstraints();
country3restraints.gridx = 4;
country3restraints.gridy = 30;
Как видите, Значения gridX для каждой кнопки никогда не превышают 1 пиксель, но по какой-то причине мои выходные данные выглядят так:
, причем гораздо больше непропорциональное количество места, чем другие элементы. Это происходит в нескольких точках кода. Что происходит?
Вот весь мой код для дополнительной помощи
package Starting;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class View extends JPanel implements ActionListener {
View(Container pane) {
pane.setLayout(new GridBagLayout());
ImageIcon myImage = new ImageIcon("Elf.jpg");
Image resizedElf = myImage.getImage();
resizedElf = resizedElf.getScaledInstance(80, 60, Image.SCALE_DEFAULT);
myImage = new ImageIcon(resizedElf);
JLabel myImageLabel = new JLabel();
myImageLabel.setIcon(myImage);
GridBagConstraints imageConstraints = new GridBagConstraints();
//X is cols
//Y is row
imageConstraints.gridx = 0;
imageConstraints.gridy = 0;
imageConstraints.gridheight = 1;
imageConstraints.gridwidth = 1;
pane.add(myImageLabel, imageConstraints);
JList theGames = new JList();
JLabel Company = new JLabel("Company");
// The Country buttons
JLabel Country = new JLabel("Country:");
ButtonGroup countryofOrigin = new ButtonGroup();
JRadioButton country1 = new JRadioButton("Japan");
JRadioButton country2 = new JRadioButton("U.S");
JRadioButton country3 = new JRadioButton("Canada");
GridBagConstraints countrytextRestraints = new GridBagConstraints();
countrytextRestraints.gridx = 1;
countrytextRestraints.gridy = 30;
GridBagConstraints country1restraints = new GridBagConstraints();
country1restraints.gridx = 2;
country1restraints.gridy = 30;
GridBagConstraints country2restraints = new GridBagConstraints();
country2restraints.gridx = 3;
country2restraints.gridy = 30;
GridBagConstraints country3restraints = new GridBagConstraints();
country3restraints.gridx = 4;
country3restraints.gridy = 30;
//Model is all of the data
//Methods in controller called through actionlistener
//View is correct
country1.addActionListener(e -> {});
country2.addActionListener(e -> {});
country3.addActionListener(e -> {});
countryofOrigin.add(country1);
countryofOrigin.add(country2);
countryofOrigin.add(country3);
pane.add(country1, country1restraints);
pane.add(country2, country2restraints);
pane.add(country3, country3restraints);
pane.add(Country, countrytextRestraints);
//Genre buttons
JLabel Genre = new JLabel("Genre");
ButtonGroup thegenres = new ButtonGroup();
JRadioButton action = new JRadioButton("Action");
action.addActionListener(event -> { });
JRadioButton RPG = new JRadioButton("RPG");
RPG.addActionListener(event -> { });
JRadioButton Puzzle = new JRadioButton("Puzzle");
Puzzle.addActionListener(event -> { });
thegenres.add(action);
thegenres.add(RPG);
thegenres.add(Puzzle);
GridBagConstraints genreTextconstraints = new GridBagConstraints();
genreTextconstraints.gridx = 1;
genreTextconstraints.gridy = 40;
GridBagConstraints actionRestraints = new GridBagConstraints();
actionRestraints.gridx = 2;
actionRestraints.gridy = 40;
GridBagConstraints RPGconstraints = new GridBagConstraints();
RPGconstraints.gridx = 3;
RPGconstraints.gridy = 40;
GridBagConstraints puzzleConstraints = new GridBagConstraints();
puzzleConstraints.gridx = 4;
puzzleConstraints.gridy = 40;
pane.add(action, actionRestraints);
pane.add(RPG, RPGconstraints);
pane.add(Puzzle, puzzleConstraints);
pane.add(Genre,genreTextconstraints);
JLabel PriceLabel = new JLabel("Price");
JTextField priceText = new JTextField("Enter price");
priceText.addActionListener(event -> { });
JLabel DescriptionLabel = new JLabel("Description");
JTextField Description = new JTextField("Describe the game here!");
JButton cancel = new JButton("cancel");
cancel.addActionListener(e -> { });
JButton save = new JButton("Save");
save.addActionListener(e -> { });
GridBagConstraints priceLabelConstraints = new GridBagConstraints();
priceLabelConstraints.gridx = 1;
priceLabelConstraints.gridy = 20;
GridBagConstraints priceTextConstraints = new GridBagConstraints();
priceTextConstraints.gridx = 2;
priceTextConstraints.gridy = 20;
GridBagConstraints DescriptionLabelConstraints = new GridBagConstraints();
DescriptionLabelConstraints.gridx = 29;
DescriptionLabelConstraints.gridy = 50;
GridBagConstraints DescriptionConstraints = new GridBagConstraints();
DescriptionConstraints.gridx = 30;
DescriptionConstraints.gridy = 50;
GridBagConstraints CancelConstraints = new GridBagConstraints();
CancelConstraints.gridx = 10;
CancelConstraints.gridy = 70;
GridBagConstraints saveConstraints = new GridBagConstraints();
saveConstraints.gridx = 11;
saveConstraints.gridy = 70;
pane.add(PriceLabel,priceLabelConstraints);
pane.add(priceText, priceTextConstraints);
pane.add(DescriptionLabel, DescriptionLabelConstraints);
pane.add(Description, DescriptionConstraints);
pane.add(cancel, CancelConstraints);
pane.add(save, saveConstraints);
JList listofGames = new JList();
listofGames.addListSelectionListener(e -> {});
GridBagConstraints listofGamesconstraints = new GridBagConstraints();
listofGamesconstraints.gridx = 60;
listofGamesconstraints.gridy = 60;
pane.add(listofGames, listofGamesconstraints);
}
@Override
public void actionPerformed(ActionEvent e) {
}
public static void main(String[] args) {
}
}
И
package Starting;
import javax.swing.*;
import java.awt.*;
public class Starter {
public static void main(String[] args) {
JFrame frame = new JFrame("Example Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setPreferredSize(new Dimension(800,600));
mainPanel.setBackground(Color.white);
View theview = new View(frame.getContentPane());
theview.setPreferredSize(new Dimension(800,600));
theview.setLayout(new GridBagLayout());
mainPanel.add(theview);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setVisible(true);
}
}
Вот то, что я тоже хочу, чтобы выглядело для справки