JScrollPane nie przewija się poza ustawiony rozmiar
Używam okienka przewijania, z JPanel wewnątrz, który rysuje siatkę kwadratów, które są obiektami z tablicy [] [].
JEŻELI tablica to [83] [81] o rozmiarze 18 ^ 2, wygląda to tak:http://i.imgur.com/fwJ9LV6.png (Zwróć uwagę na białą ramkę na krawędzi siatki)
Jednak te same prostokąty w [84] [82]:http://i.imgur.com/PZ2rNY3.png (Ostatnie wiersze zostaną pocięte).
Teraz:
Zwiększono preferowane i maksymalne rozmiary zarówno panelu przewijania, jak i panelu Jpanel, do znacznie powyżej tego, co jest potrzebne.Zaznaczono, że JPanel jest rzutnią przewijanego obiektu.I nic to nie zmieniło.
Moja klasa Jpanel to:
package BlastRadius;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;
/**
* Canvas Class Stuart Bradley 25-1-2013 Contains the paint component
*/
public class BlastRadiusCanvas extends JPanel {
GridOfNodes grid = new GridOfNodes();
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
RenderingHints rh = g2d.getRenderingHints();
rh.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(rh);
//Draw space
int pixelsAcross = 32;
int pixelsDown = 0;
int size = 18;
for (int i = 0; i < grid.getRows(); i++) {
for (int j = 0; j < grid.getColumns(); j++) {
g2d.setColor(grid.getNodeGrid()[i][j].getColour());
g2d.fillRect(pixelsAcross, pixelsDown, size, size);
g2d.setColor(new Color(0, 0, 0));
g2d.drawRect(pixelsAcross, pixelsDown, size, size);
//Better Ovals maybe needed, try Ellipise2D class
if (grid.getNodeGrid()[i][j].getHasOval() == true) {
g2d.setColor(new Color(255, 255, 255));
g2d.fillOval((pixelsAcross + (size / 2) - 1), (pixelsDown + (size / 2) - 1), size / 4, size / 4);
}
pixelsAcross += 18;
}
pixelsDown += 18;
pixelsAcross = 32;
//Draws gene string for first object in each row
g2d.setColor(new Color(0, 0, 0));
g2d.drawString(grid.getNodeGrid()[i][0].getGeneString(), 5, pixelsDown - 5);
}
}
}
Okienko przewijania i pokrewne mogą wysyłać całą klasę GUI w razie potrzeby:
jScrollPane1 = new javax.swing.JScrollPane();
jScrollPane1.setPreferredSize(new java.awt.Dimension(10000, 10000));
jScrollPane1.setViewportView(drawingJPanel);
//Grouping
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
);
Chociaż robiłem wcześniej GUI, zarówno za pośrednictwem środowisk RAD, jak i ręcznie, przewijalne interfejsy są dla mnie czymś nowym!