I'm looking to try and load up a JScrollPane with the horizontal JScrollBar set all the way to the right, i.e. like in this image:
https://i.stack.imgur.com/02BKi.png
However, no matter what I do, I end up with this image:
https://i.stack.imgur.com/Eh50d.png
This is the relevant snippet of my code
JComponent graph = new TrendsForSuccLarge(wccScores, wccScoresTimes, graphStrings, maxScore, bgColour, iPadWidth);
JScrollPane graphScrollPane = new JScrollPane(graph, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollBar horizontal = graphScrollPane.getHorizontalScrollBar();
horizontal.setValue( horizontal.getMaximum() );
this.getContentPane().add(graphScrollPane, BorderLayout.CENTER);
Any ideas of what's going wrong?
Thanks in advance!
Kesh
SSCCE
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
class ForStackOverflow {
private static JFrame main;
//opens up a line chart on full screen
public static void main(String args[]) {
TempGraph tg = new TempGraph(main);
tg.setVisible(true);
}
}
class TempGraph extends JDialog {
private static final long serialVersionUID = 1L;
//opens up a line chart on full screen
public TempGraph(JFrame parent)
{
// load the frame
super(parent,true);
configureFrame();
}
private void configureFrame()
{
int iPadHeight = 644;
int iPadWidth = 981;
this.getContentPane().setLayout(new BorderLayout());
JComponent graph = new TrendsForSuccLarge2(iPadWidth);
JScrollPane graphScrollPane = new JScrollPane(graph, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
this.getContentPane().add(graphScrollPane, BorderLayout.CENTER);
JPanel buttons = new JPanel();
buttons.setLayout(new BorderLayout());
JButton ok = new JButton("Done");
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
next();
}
});
buttons.add(ok,BorderLayout.CENTER);
JButton exit = new JButton("Exit");
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
buttons.add(exit,BorderLayout.WEST);
this.getContentPane().add(buttons, BorderLayout.SOUTH);
this.pack();
this.setSize(this.getWidth(), 750);
this.setResizable(true);
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int widthFrame = iPadWidth;
int heightFrame = iPadHeight;
this.setSize(widthFrame, heightFrame);
setBounds((screenSize.width - this.getWidth()) / 2,
(screenSize.height - this.getHeight()) / 2,
getWidth(),
getHeight());
}
private void next()
{
this.setVisible(false);
}
}
class TrendsForSuccLarge2 extends JComponent {
// basic parameters
private static int PREF_W = 200;
private static final int PREF_H = 200;
private static final int BORDER_GAP = 10;
private static final int GRAPH_GAP = BORDER_GAP + 20;
private int graphWidth = 0;
private static final long serialVersionUID = 1L;
TrendsForSuccLarge2(int prefGraphWidth) {
graphWidth = prefGraphWidth;
paintComponent(null);
}
public void paint(Graphics g) {
int windowWidth = 2600;
PREF_W = windowWidth;
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawString("Hello", graphWidth/2, getHeight() - GRAPH_GAP);
g2.drawString("Hello1", graphWidth - GRAPH_GAP, getHeight() - GRAPH_GAP);
g2.drawString("Hello2", windowWidth - GRAPH_GAP - GRAPH_GAP, getHeight() - GRAPH_GAP);
// create x and y axes
g2.setColor(Color.black);
g2.drawLine(GRAPH_GAP, getHeight() - GRAPH_GAP, GRAPH_GAP, GRAPH_GAP);
g2.drawLine(GRAPH_GAP, getHeight() - GRAPH_GAP, windowWidth - GRAPH_GAP, getHeight() - GRAPH_GAP);
}
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
}
I solved this, apparently the issue was that my component had a preferred size that was too small. I rammed the preferred size up and everything sorted itself.