在更改组件的位置后,形状变得不可见

时间:2016-12-18 21:07:01

标签: java swing

**当我尝试更改任何组件的位置时,例如Button Label TextField我的形状的某些部分变得不可见。当我删除我将位置设置为组件的代码时(在这种情况下,它是TextField)形状变得正常。 **

public class Line {


    public static void main(String[] args) {
       JFrame frame = new JFrame("JFrame Example");
       frame.setSize(1366, 768);
       frame.setLocationRelativeTo(null);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setLayout(null);

       frame.setVisible(true);
       JButton button=new JButton("Show lines");
       frame.add(button);
       button.setBounds(60, 400, 220, 30);
       button.setVisible(true);
       JTextField txtf=new JTextField();
       frame.add(txtf);
       txtf.setVisible(true);
       txtf.setSize(50, 100);

       button.addMouseListener(new MouseListener() {
           @Override
           public void mouseClicked(MouseEvent me) {
              button.setVisible(false);
              Graphics2D grf= (Graphics2D) frame.getGraphics();

        txtf.setVisible(false);
        txtf.setText("APPLE");
        txtf.setLocation(600, 600);
        txtf.setVisible(true);
        grf.fillOval(600, 600, 10, 10);

        grf.fillOval(190, 600, 10, 10);
        grf.fillOval(900, 650, 10, 10);
        grf.fillOval(750, 160, 10, 10);
        grf.fillOval(600, 400, 10, 10);
        grf.fillOval(1139, 266, 10, 10);
        grf.drawLine(1144, 271, 605, 405);
        grf.drawLine(195, 605, 605, 405);
        grf.drawLine(755, 165, 605, 405);
        grf.drawLine(755, 165, 1144, 271);
        grf.drawLine(905, 655, 1144, 271);
        grf.drawLine(905, 655, 605, 405);
        grf.drawLine(205, 205, 605, 405);
        grf.drawLine(205, 205, 755, 165);


}

           @Override
           public void mousePressed(MouseEvent me) {
           }

           @Override
           public void mouseReleased(MouseEvent me) {
           }

           @Override
           public void mouseEntered(MouseEvent me) {
           }

           @Override
           public void mouseExited(MouseEvent me) {
           }
       });

       button.setVisible(true);

    }

} 

1 个答案:

答案 0 :(得分:1)

  

当我尝试更改任何compoenet的位置时,例如Button Label TextFielt,我的形状的某些部分变得不可见

你自定义绘画是错的。您不应该使用框架的getGraphics()方法来获取Graphics对象。一旦Swing确定需要重新绘制组件,使用此方法的任何绘画都将丢失。

每当您更改Swing组件的属性时,组件都会重新绘制。因此,您将丢失与上述Graphics对象关联的任何绘制。

相反,您应该覆盖JPanel的install.packages("rgl") library(rgl) plot3d(iris[1:3]) # Nothing appears in RStudio plot viewer plot(cars) # The cars scatterplot appears in my RStudio plot viewer dev.off() 并将绘制逻辑添加到该方法中。然后将JPanel添加到框架中。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。下载示例并根据您的实际需求进行自定义。