У меня масса проблем с выяснением, почему кнопки в этом не отображаются? Они появлялись ранее сегодня, когда я тестировал программу, но теперь я застрял на 2 часа, пытаясь заставить кнопки снова появиться. Это также очень странно, потому что панель определенно появляется, потому что появляется фраза «Добро пожаловать в BookListApp».
public BookListUI() {
textPrompt.setText("Welcome to the BookListApp, fellow bookworm. Start storing your books immediately!");
textPrompt.setBounds(WIDTH / 2 - 300, 50,500,100);
frame = new JFrame();
panel = new JPanel();
panel.setLayout(null);
panel.setSize(WIDTH, HEIGHT);
panel.add(textPrompt);
addButtons();
frame.setSize(WIDTH, HEIGHT);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("BookList Application");
frame.setVisible(true);
}
public void addButtons() {
panel.add(new JButton("Finished books"));
panel.add(new JButton("Favorite books"));
panel.add(new JButton("Search by genre"));
panel.add(new JButton("Save all your books!"));
panel.add(new JButton("Load your BookList Application"));
panel.add(new JButton("Exit application"));
}
public static void main(String[] args) {
new BookListUI();
}
Общие советы: 1) [Правки], чтобы добавить минимальный воспроизводимый пример. 2) Предоставьте иллюстрацию ASCII или простой рисунок того, как ожидается, что графический интерфейс будет выглядеть как при размере по умолчанию, так и при увеличении. 3) panel.setSize(WIDTH, HEIGHT); .. frame.setSize(WIDTH, HEIGHT); Лучшее, что можно сказать об этом, это то, что размер панели будет игнорироваться. Один или оба размера неверны, так как панель не может быть больше, чем рамка, которая ее отображает. Лучше pack() рамку подбирать по размеру к отображаемому контенту. Если графический интерфейс использует макеты, этот размер будет предложен автоматически. 4) textPrompt плохо назван. ..
.. generalInfo было бы точнее. 5) addButtons() — рассмотрите возможность добавления их (или соответствующих Action элементов) в JToolBar вместо этого.




Если вы используете абсолютный макет (panel.setLayout(null);), вам нужно указать границы кнопок, которые будут видны:
button.setBounds(200, 200, 300, 30);
Хотя это и не является «неправильным», это очень плохой способ компоновки графического интерфейса пользователя, который приведет ко многим проблемам и снизит удобство сопровождения кода. Пока вы не поймете, насколько плохой совет для кросс-платформенных графических интерфейсов, пожалуйста, воздержитесь от дальнейших советов.
Да, но он/она спросил, почему кнопки не видны, не спрашивая совета по расположению.
Используйте один или несколько подходящих менеджеров компоновки. Дополнительные сведения см. в статье Размещение компонентов внутри контейнера .
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class BookListUI {
JLabel textPrompt = new JLabel("Welcome to the BookListApp, fellow bookworm. Start storing your books immediately!", JLabel.CENTER);
public BookListUI() {
JFrame frame = new JFrame();
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new EmptyBorder(32, 32, 32, 32));
frame.setContentPane(contentPane);
frame.add(textPrompt, BorderLayout.NORTH);
JPanel menuPane = new JPanel(new GridLayout(-1, 1));
menuPane.setBorder(new EmptyBorder(32, 32, 0, 32));
addButtons(menuPane);
frame.add(menuPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setTitle("BookList Application");
frame.setVisible(true);
}
public void addButtons(Container container) {
container.add(new JButton("Finished books"));
container.add(new JButton("Favorite books"));
container.add(new JButton("Search by genre"));
container.add(new JButton("Save all your books!"));
container.add(new JButton("Load your BookList Application"));
container.add(new JButton("Exit application"));
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new BookListUI();
}
});
}
}
Проблемы начинаются здесь:
panel.setLayout(null);. Исправьте это с помощью макетов, прежде чем тратить свое время или просить нас тратить свое.