【发布时间】:2012-03-18 20:49:57
【问题描述】:
我的英语不好,但我会尽力解释。 我有个问题。 在 JPanel 我画线....它们应该超出对象 JPanel 的区域,而 JScrollPane 理论上应该显示整个面板,但它没有更新,也没有显示为面板范围释放的所有行.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Console;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class TestFrame extends JFrame {
static int speed = 10;
static int floor = 22;
public static void createGUI() {
JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Font font = new Font("Verdana", Font.PLAIN, 25);
JPanel butPanel = new JPanel();
JButton biginButton = new JButton("start");
biginButton.setFont(font);
biginButton.setFocusable(false);
butPanel.add(biginButton);
JButton remButton = new JButton("repaint");
remButton.setFont(font);
remButton.setFocusable(false);
butPanel.add(remButton);
final JPanel labPanel = new JPanel();
final JScrollPane scrollPane = new JScrollPane(labPanel);
labPanel.setLayout(new BoxLayout(labPanel, BoxLayout.Y_AXIS));
biginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//labPanel.getGraphics().drawString("Ololo", 50, 50);
int floH = 100;
for(int i = 0; i < floor; i++){
labPanel.getGraphics().drawLine(0, i*floH, 300, i*floH);
labPanel.getGraphics().setColor(Color.RED);
scrollPane.revalidate();
}
}
});
remButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
labPanel.repaint();
scrollPane.revalidate();
}
});
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(butPanel, BorderLayout.NORTH);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setPreferredSize(new Dimension(screenSize.width-10, screenSize.height-10));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
createGUI();
}
});
}
}
【问题讨论】:
-
那么真正的问题是什么?
-
如果面板对象超出,你需要做的事情是绘制增加滚动
-
public class TestFrame extends JFrame {将其更改为public class TestFrame {& 该类应该像现在一样工作(或差)。
标签: java swing awt jpanel jscrollpane