#java #applet
#java #апплет
Вопрос:
[Спасибо за ответы. Это для васhttp://www.youtube.com/watch?v=Vo0Cazxj_yc ] Это может и должно быть очень простым вопросом, но я не смог найти решение.
У меня есть Java-апплет, и мне нужна вертикальная полоса прокрутки, чтобы я мог загружать тысячи кнопок в апплет и использовать полосу прокрутки для просмотра кнопок внизу апплета.
Кнопки используются для выбора элементов. если кнопка нажата, элемент выбран.
Когда я загружаю кнопки, все они отображаются на одном экране, сжатые вместе, чтобы соответствовать ширине и высоте экрана (~ 1000 пикселей, ~ 1000 пикселей). Приведенный ниже код является частью моей программы. Пожалуйста, прокомментируйте.
JFrame frame = new JFrame();
NameClassifier nameClassifier = new NameClassifier();
JScrollPane scrollPane = new JScrollPane(nameClassifier);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(scrollPane);
frame.getContentPane().add(nameClassifier);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
System.out.println("exiting");
Комментарии:
1. Для лучшей помощи раньше. опубликуйте SSCCE . Обратите внимание, что я выполнил SSCCE из ваших фрагментов примерно в 35 строках кода.
2. Кстати, почему вы постоянно ссылаетесь на «апплет», когда в коде используется «фрейм»?
3. «тысячи кнопок .. используются для выбора элементов». Похоже, что она лучше подходит для
JList
компонента с включенным множественным выбором.4. Эндрю, ты прав, мне следовало добавить часть NameClassifier. Кроме того, это первый раз, когда мне пришлось использовать апплеты, я не знаю разницы между ними и фреймами
5. Апплет (обычно) встроен в веб-страницу.
Frame
ИлиJFrame
свободно перемещается на рабочем столе. Я настоятельно рекомендую вам избегать апплетов, если это вообще возможно.
Ответ №1:
import java.awt.*;
import javax.swing.*;
class ManyButtons {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
NameClassifier nameClassifier = new NameClassifier();
JScrollPane scrollPane = new JScrollPane(nameClassifier);
scrollPane.setVerticalScrollBarPolicy(
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(scrollPane);
// nameClassifier has already been added to the scroll pane.
//frame.getContentPane().add(nameClassifier);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
System.out.println("exiting");
}
});
}
}
class NameClassifier extends JPanel {
NameClassifier() {
super(new GridLayout(0,10,2,2));
for (int ii=1; ii<=1000; ii ) {
add(new JButton("Button " ii));
}
}
}
Ответ №2:
Я думаю, вы хотите использовать макет переноса.
Ответ №3:
Не добавляйте ничего непосредственно во фрейм, поэтому
frame.add(scrollPane);
неверно.
Добавьте элементы в панель содержимого. вероятно
scrollPane.add(nameClassifier);
frame.getContentPane().add(scrollPane);
кстати, это один симпатичный графический интерфейс. 🙂
Комментарии:
1. -1, нет ничего плохого в добавлении компонентов непосредственно во фрейм. Это поддерживается начиная с JDK5.
2. Дорогой, я бы хотел поделиться этим замечательным дизайном со всем миром, но, увы, использовать его буду только я.