📄 s04.htm
字号:
private int rainh = rain.getIconHeight();</p> <p> public void paintComponent(Graphics g) {<br> Dimension size = getSize();</p> <p> for(int row=0; row < size.height; row += rainh)<br> for(int col=0; col < size.width; col += rainw)<br> rain.paintIcon(this,g,col,row);<br> }<br> }<br> class ColoredPanel extends JPanel {<br> public void paintComponent(Graphics g) {<br> super.paintComponent(g);</p> <p> Dimension size = getSize();</p> <p> g.setColor(Color.black);<br> g.drawRect(0,0,size.width-1,size.height-1);</p> <p> g.setColor(Color.red);<br> g.fillRect(size.width/2-25,size.height/2-25,50,50);<br> }<br> public Dimension getPreferredSize() {<br> return new Dimension(100,100);<br> }<br> }</p> <hr size="1" noshade> <p> </p> <p> 4.3.7 立即绘制Swing组件</p> <p> </p> <p align="center"><b>例4-8 在事件处理方法中使用paintImmediately()</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class TestApplet extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> final JPanel panel = new JPanel();<br> JButton button = new JButton("repaint");</p> <p> panel.setBackground(Color.blue);<br> panel.setPreferredSize(new Dimension(100,100));</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button);<br> contentPane.add(panel);</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> Color c = panel.getBackground();<br> Dimension sz = panel.getSize();</p> <p> panel.setBackground(<br> c == Color.blue ? Color.red : Color.blue);</p> <p> panel.paintImmediately(<br> 0,0,sz.width,sz.height);</p> <p> // for illustrative purposes only<br> try {<br> Thread.currentThread().sleep(5000);<br> }<br> catch(InterruptedException ex) {<br> ex.printStackTrace();<br> }<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 4.4 双缓存</p> <p> </p> <p align="center"><b>例4-9 双缓存测试小应用程序</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class DoubleBufferingTest extends JApplet {<br> public void init() {<br> final JSlider slider = <br> new JSlider(JSlider.HORIZONTAL,0,100,50);</p> <p> final Container contentPane = getContentPane();<br> JCheckBox dbcheckBox = new JCheckBox("double buffered");<br> JPanel controlPanel = new JPanel();</p> <p> dbcheckBox.setSelected(true);<br> controlPanel.add(dbcheckBox);</p> <p> slider.setPaintTicks(true);<br> slider.setMinorTickSpacing(5);<br> slider.setMajorTickSpacing(15);</p> <p> contentPane.add(controlPanel, "North");<br> contentPane.add(slider, "Center");</p> <p> dbcheckBox.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent event) {</p> <p> if(event.getStateChange() == ItemEvent.SELECTED) {<br> slider.setDoubleBuffered(true);<br> }<br> else {<br> slider.setDoubleBuffered(false);<br> }<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例4-10 为组件的容器禁用双缓存</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class DoubleBufferingTest extends JApplet {<br> public void init() {<br> final Container contentPane = getContentPane();</p> <p> JSlider slider = new JSlider(JSlider.HORIZONTAL,0,100,50);<br> JCheckBox dbcheckBox = new JCheckBox("double buffered");<br> JPanel controlPanel = new JPanel();</p> <p> dbcheckBox.setSelected(true);<br> controlPanel.add(dbcheckBox);</p> <p> slider.setPaintTicks(true);<br> slider.setMinorTickSpacing(5);<br> slider.setMajorTickSpacing(15);</p> <p> contentPane.add(controlPanel, "North");<br> contentPane.add(slider, "Center");</p> <p> dbcheckBox.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent event) {<br> JComponent cp = (JComponent)getContentPane();<br> JComponent rp = (JComponent)getRootPane();</p> <p> if(event.getStateChange() == ItemEvent.SELECTED) {<br> rp.setDoubleBuffered(true);<br> cp.setDoubleBuffered(true);<br> }<br> else {<br> rp.setDoubleBuffered(false);<br> cp.setDoubleBuffered(false);<br> }<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例4-11 调用RepaintManager.getDoubleBufferingEnabled()</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class DoubleBufferingTest extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> JCheckBox dbcheckBox = new JCheckBox("double buffered");<br> JPanel controlPanel = new JPanel();<br> final JSlider slider = <br> new JSlider(JSlider.HORIZONTAL,0,100,50);</p> <p> dbcheckBox.setSelected(true);<br> controlPanel.add(dbcheckBox);</p> <p> slider.setPaintTicks(true);<br> slider.setMinorTickSpacing(5);<br> slider.setMajorTickSpacing(15);</p> <p> contentPane.add(controlPanel, "North");<br> contentPane.add(slider, "Center");</p> <p> dbcheckBox.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent event) {<br> RepaintManager rm =<br> RepaintManager.currentManager(slider);</p> <p> if(event.getStateChange() == ItemEvent.SELECTED) {<br> rm.setDoubleBufferingEnabled(true);<br> }<br> else {<br> rm.setDoubleBufferingEnabled(false);<br> }<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例4-12 动画测试小应用程序</b></p> <hr size="1" noshade> <hr size="1" noshade> <p align="center"><b>例4-13 AnimationPane类清单</b></p> <hr size="1" noshade> <hr size="1" noshade> <p> </p> <p> </p> <p> </p> <p> </p> <p> 4.5 调试图形</p> <p> </p> <p align="center"><b>例4-14 为调试图形使用Log(日志)和Flash(闪烁)选项</b></p> <hr size="1" noshade> import javax.swing.*;<br> import javax.swing.event.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.*; <p>public class DebugGraphicsTest extends JApplet {<br> private JSlider slider = new JSlider();<br> boolean logIsOn = false, flashIsOn = false;</p> <p> public void init() {<br> Container cp = getContentPane();<br> RepaintManager rm = <br> RepaintManager.currentManager(slider);</p> <p> rm.setDoubleBufferingEnabled(false);</p> <p> cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));<br> cp.add(slider);<br> cp.add(makeControlPanel());</p> <p> slider.setEnabled(false);<br> }<br> private JPanel makeControlPanel() {<br> JPanel controls = new JPanel(),<br> checkBoxes = new JPanel();<br> JCheckBox logCheckBox = new JCheckBox("Log"),<br> flashCheckBox = new JCheckBox("Flash");<br> JButton repaintButton = new JButton("repaint");</p> <p> final JSlider flashTimeSlider = <br> new JSlider(JSlider.HORIZONTAL,0,250,100);</p> <p> flashTimeSlider.setPaintTicks(true);<br> flashTimeSlider.setMajorTickSpacing(10);<br> flashTimeSlider.setMinorTickSpacing(5);</p> <p> controls.setLayout(new BoxLayout(controls, <br> BoxLayout.X_AXIS));<br> checkBoxes.setLayout(new BoxLayout(checkBoxes, <br> BoxLayout.Y_AXIS));</p> <p> flashTimeSlider.setBorder(<br> BorderFactory.createTitledBorder("Flash Time"));<br> controls.setBorder(<br> BorderFactory.createTitledBorder("Controls"));</p> <p> checkBoxes.add(logCheckBox);<br> checkBoxes.add(flashCheckBox);</p> <p> controls.add(repaintButton);<br> controls.add(flashTimeSlider);<br> controls.add(checkBoxes);</p> <p> repaintButton.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int opts = 0;</p> <p> if(logIsOn) opts |= DebugGraphics.LOG_OPTION;<br> if(flashIsOn) opts |= DebugGraphics.FLASH_OPTION;</p> <p> slider.setDebugGraphicsOptions(opts);<br> repaint();<br> }<br> });</p> <p> flashTimeSlider.addChangeListener(new ChangeListener() {<br> public void stateChanged(ChangeEvent e) {<br> DebugGraphics.setFlashTime(<br> flashTimeSlider.getValue());<br> }<br> });</p> <p> flashCheckBox.addItemListener(new ItemListener() {<br> public void itemStateChanged(ItemEvent e) {<br> AbstractButton b = (AbstractButton)e.getSource();</p> <p> if(b.isSelected()) flashIsOn = true;<br> else flashIsOn = false;<br> }<br> });<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -