我正在尝试加载一个 JScrollPane 并将水平 JScrollBar 设置到右侧,即像这张图片中一样:
http://i.imgur.com/VeKYPa6.png
但是,无论我做什么,我都会得到这个图像:
http://i.imgur.com/c9KzRqZ.png
这是我的代码的相关片段
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);
关于出了什么问题的任何想法?
提前致谢!
凯什
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);
}
}