У меня есть класс, который рисует очень простую графику, такую как линии, круги и прямоугольники. Линии динамически расширяются, и иногда, когда они расширяются за пределы разрешения, их невозможно увидеть без полосы прокрутки. Поэтому я добавил JScrollPane в свой JFrame, но, к сожалению, полоса прокрутки не прокручивается, несмотря на то, что уже вызывается диспетчер компоновки.
Вот что у меня есть: - Класс, который рисует компоненты (линии, прямоугольники, круги) - Класс, который устанавливает JFrame/JScrollPane
Вот фрагмент кода моего класса GUI:
JFrame frame = new JFrame("GUIFrame");
frame.setLayout(new BorderLayout()); // Layout already set
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawComponent comp = new DrawComponent(); // Reference to class that draw components
JScrollPane sp = new JScrollPane(comp, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setPreferredSize(new Dimension(1000, 1000));
frame.add(sp, BorderLayout.CENTER);
frame.setSize(500,500);
frame.setVisible(true);
С приведенным выше кодом у меня есть Java, чтобы показать мне JFrame с панелью прокрутки, содержащей мои jcomponents. Я настроил полосы прокрутки так, чтобы они всегда отображались, как показано выше, но они не прокручиваются, выделены серым цветом.
Как предложил Эндрю, мне потребовалось некоторое время, чтобы создать SSCCE, чтобы отразить то, что я пытаюсь сделать:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.util.Random;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class DrawTest {
public static void main(String[] args){
JFrame frame = new JFrame("SSCCE");
frame.setLayout(new BorderLayout());
frame.setSize(1000, 1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawComp d = new DrawComp();
JScrollPane sp = new JScrollPane(d, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(sp);
frame.setVisible(true);
}
}
class DrawComp extends JComponent {
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Random ran = new Random();
int ranNum = ran.nextInt(10);
System.out.println(ranNum);
double length = 100 * ranNum;
g2.draw(new Line2D.Double(10, 10, length, length));
}
}
Приведенный выше код рисует диагональную линию на основе случайного ввода. Что я собираюсь сделать, так это то, что, когда строка становится настолько длинной, что выходит за пределы размера кадра, я надеюсь, что смогу прокручивать и видеть всю строку. Я снова добавил линейный компонент в JScrollPane, но он не может прокручиваться.
comp.setPreferredSize(new Dimension(1000, 1000)); sp.validate(); //sp.setPreferredSize(new Dimension(1000, 1000));
3)frame.pack();
- person Andrew Thompson   schedule 02.01.2013sp.setPreferredSize(new Dimension(1000, 1000));
повлияет не на прокручиваемую область, а на размер компонента.ViewPort
отвечает за определение прокручиваемой области (по крайней мере, с точки зрения того, чего вы пытаетесь достичь - person MadProgrammer   schedule 02.01.2013